2016-04-07 3 views
0

私は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側で間違っているかもしれませんが、それはそうだと思いますか?

ありがとうございます!

答えて

0

あなたが接続したいIPアドレスを明示的に定義するのに役立ちます。たとえば:これが完了すると

import socket 
IP = "127.0.0.1" 
port = 1234 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
try: 
    s.bind((IP, 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 

は、のようにnetcatを介してクライアントとして接続するので:

-$ ncat 127.0.0.1 1234 -u 

これは、同じ問題を抱えた後、私のために働きました。

1

まず、ポートが開いているか閉じているかを確認してバインドできます。これはあなたを助けるかもしれません:

import socket; 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
result = sock.connect_ex(('xxx.xxx.xxx.xxx',1234)) 
if result == 0: 
    print "Port is open" 
else: 
    print "Port is not open" 
+0

これを実行して、ポートが開いています。私はもう少し掘り下げましたが、UDPを使用せずにTCPを使用して動作するように、このコードのバリエーションを得ることができます。私はUDPを好きです。提案していただきありがとうございます! –

関連する問題