2011-08-09 13 views
4

私はhttp://wiki.python.org/moin/UdpCommunicationrecvfromが返すアドレスの2番目の部分は何ですか?

からサーバーをコードするこれらの2枚を使用しています:

:サーバーで

import socket 

UDP_IP="127.0.0.1" 
UDP_PORT=5005 
MESSAGE="Hello, World!" 

print "UDP target IP:", UDP_IP 
print "UDP target port:", UDP_PORT 
print "message:", MESSAGE 

sock = socket.socket(socket.AF_INET, # Internet 
         socket.SOCK_DGRAM) # UDP 
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT)) 

、私は最後の行を変更します。クライアントは

import socket 

UDP_IP="127.0.0.1" 
UDP_PORT=5005 

sock = socket.socket(socket.AF_INET, # Internet 
         socket.SOCK_DGRAM) # UDP 
sock.bind((UDP_IP,UDP_PORT)) 

while True: 
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes 
    print "received message:", data,"from", addr 

 print "received message:", data,"from", addr 

これは、メッセージが送信されたアドレスを出力します。 私のmacbookでポートは40000か65000の間の乱数のようです(私はそれがランダムであると確信しています)。

これはどういう考えですか?

答えて

3

これは、クライアントがサーバーにデータを送信するために使用するephemeral portです。

+0

私はこの種のポートの実用性を本当に理解していませんが、このポートはここにありますので、1つのアプリケーションが何らかの答えを出すように変更しましたか? – jokoon

+0

考えられるのは、長時間聴いていなければならない重要な事柄に対しては、ポート番号が小さいほど必要なので、クライアントアプリケーションは、その時点で利用可能な高域ポートから送信します。 – agf

+0

代わりに使用するポートを指定することはできませんか? – jokoon

1

これは間違いなくポートです。送信者側で確認するには、print sock.getsockname()と入力します。

eで意図的に設定することもできます。 g。 sock.sendto()行の前のsock.bind(('', 54312))

これは、ソフトウェアが送信者のポート範囲をチェックするコンテキストで役立ちます。ポート0..1023は特権ポートです。多くのOSではrootのみがこれらのポートにバインドできます。

しかし、非常に多くの場合、変更する必要はないため、設定したままにしておくことが大切です。

このポートは、接続または接続の相手を識別するタプルの4番目の要素であることを意味します。タプルは(source_ip、source_port、destination_ip、destination_port)です。

関連する問題