私はUbuntu MATE(Odroid XU-4上で動作している)上のUDP(任意のポート1234)をリッスンするPythonスクリプトを作成しようとしています。このために、接続を確立し、Pythonモジュールsocket
を使用して通信するコードが見つかりました。コードは次のとおりです。PythonによるUDP通信がアクティブなインターネット接続を作成しない
import socket
port = 1234
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
s.bind(("localhost", port))
except socket.error , msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
print 'Socket bind complete'
print "waiting on port:", port
while 1:
data, addr = s.recvfrom(1024)
print data
このコードは自分では書かれていませんが、非常に簡単です。ターミナルからこのスクリプトを実行すると、エラーメッセージは表示されません。出力に従って、ソケットが作成され、接続は成功しました。私が持っている問題は、私がこれを得たチュートリアルでは、このスクリプトと通信するために、新しい端末を介してクライアント接続を開くことがそのトリックを行うということです。次のようなものがあります。
-$ ncat localhost 1234 -u
エラーメッセージはまだありません。できるだけ早く私は、データパケット(プレーンテキスト、例えば「テスト」)を提出しようとすると、私はエラーを取得する:
Ncat: Connection refused.
自分自身をトラブルシューティングするための試みで、私はすべてのUDP接続を監視するために、別の端末ウィンドウを走りましたroot権限でアクセスします。
netstat -u
スクリプトを実行している間、私はnetstat
リスト上のポート1234を見つけることが前提となりますが、私にはありません。 PythonスクリプトがUDPポート1234を正常に作成してバインドしていないことを意味しますが、それはそうだと思います。
しかし、netcat
を使用して同じUDPポートを直接開くことは、端末の機能を介して行います。
これから私は、問題がPythonスクリプトと何か関係があることを知っています。接続を確立しないとスクリプト/ Python側で間違っているかもしれませんが、それはそうだと思いますか?
ありがとうございます!
これを実行して、ポートが開いています。私はもう少し掘り下げましたが、UDPを使用せずにTCPを使用して動作するように、このコードのバリエーションを得ることができます。私はUDPを好きです。提案していただきありがとうございます! –