recvfrom返回的地址的第二部分是什么?

时间:2011-08-09 16:01:21

标签: python sockets networking udp

我正在使用http://wiki.python.org/moin/UdpCommunication

中的这两段代码

服务器:

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

客户:

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) )

在服务器中,我修改了最后一行:

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

因此它会打印发送消息的地址。 在我的Macbook上,端口似乎是40000或65000之间的一些随机数(我确定它似乎是随机的)。

知道这可能是什么吗?

2 个答案:

答案 0 :(得分:3)

客户端使用ephemeral port将数据发送到服务器。

答案 1 :(得分:1)

绝对是港口。您可以使用print sock.getsockname()在发件人方面对其进行验证。

你也可以用e来刻意设置它。 G。在sock.bind(('', 54312))行前sock.sendto()

这在软件检查发送方端口范围的上下文中非常有用:端口0..1023是特权端口 - 在许多操作系统下,只允许root绑定到这些端口。

然而,在大多数情况下,改变它是没有意义的,所以最好让它保持原样。

此端口的含义是标识连接的连接或对应的元组的第4个元素。元组是(source_ip,source_port,destination_ip,destination_port)。