我正在使用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之间的一些随机数(我确定它似乎是随机的)。
知道这可能是什么吗?
答案 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)。