2017-10-13 12 views
0

Serverコード:Pythonのソケット - クライアントUDPデータグラムを受信して​​いない

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # server UDP socket 
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # bypass OS lock on port 
s.bind((socket.gethostname(), 9999)) # bind socket to host and port 9999 
while True: 
    message, ip = s.recvfrom(1024) # receive data passed through socket 
    print "Server:\n\tMessage \"{}\" received...\n\tIt has a length of {}".format(
      message, len(message)) 
    s.sendto(str(len(message)), (socket.gethostname(), 9999)) # send message length in bytes back to client 
    s.close() # close UDP connection with client 
    sys.exit(0) # terminate server process 

クライアントコード:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
s.connect((socket.gethostname(), 9999)) 
message = "Pointless text." 
print "Client:\n\tSending message \"{}\" to the server...\n\tIt has a length of {}".format(
     message, len(message)) 
s.sendto(message, (socket.gethostname(), 9999)) 
while True: 
    response, ip = s.recvfrom(1024) 
    if int(response) == len(message): 
     print "Client:\n\tThe server returned count {} which is equal to the client's count of {}.".format(response, len(message)) 
    else: 
     print "Client:\n\tThe server returned count {} which is not equal to the client's count of {}.".format(response, len(message)) 
s.close() 

出力:

Running client in UDP mode... 
Running server in UDP mode... 

Client: 
    Sending message "Pointless text." to the server... 
    It has a length of 15 
Server: 
    Message "Pointless text." received... 
    It has a length of 15 

クライアント側recvfromがトリガーされることはありません。理由を把握できません。サーバーコードで

python2.7 server udp & python2.7 client udp 

答えて

2

、あなたはサーバのアドレス(9999)に結果を送信している、:ここで

は、あなたがそうのようなあなたのマシン上で直接それらをテストしたい場合は、完全なclientserverファイルですクライアントのものではありません(ip)。

これを試してみてください:

s.sendto(str(len(message)), ip) # send message length in bytes back to client 
+0

はあなたの先生ありがとうございました。私は、クライアントコード 's.connect((socket.gethostname()、9999))'がクライアントソケットをポート9999とクライアントコード 's.sendto(message、(socket.gethostname()、9999 )) 'は、ソケットをポート9999に送るように設定します...なぜ' connect() 'のアドレスが受信ポートを設定せず、' sendto() 'が宛先ポートを扱うのであれば、 – aweeeezy

+0

実際、私自身の質問に答えたばかりです。つまり、 'connect()'行を削除しても私のプログラムには影響しません。 – aweeeezy

関連する問題