我有两个简单的Python文件: client.py 和 server.py 。客户端只需通过UDP套接字将您键入的文本发送到服务器。
分配和收听的端口是 21567 ,但是...行读取:
print "\nReceived message '", data,"' from ", addr
server.py 中的输出 addr ,如下所示:('127.0.0.1',60471)
现在我不明白为什么会报告这个看似随机的端口,每次运行脚本时60471都是随机的。任何人都可以对这个问题有所了解,为什么不在代码中设置 21567 ?谢谢!
Python脚本文件内容如下:
# Client program
from socket import *
# Set the socket parameters
host = "localhost"
port = 21567
buf = 1024
addr = (host,port)
# Create socket
UDPSock = socket(AF_INET,SOCK_DGRAM)
def_msg = "===Enter message to send to server===";
print "\n",def_msg
# Send messages
while (1):
data = raw_input('>> ')
if not data:
break
else:
if(UDPSock.sendto(data,addr)):
print "Sending message '",data,"'....."
# Close socket
UDPSock.close()
# Server program
from socket import *
# Set the socket parameters
host = "localhost"
port = 21567
buf = 1024
addr = (host,port)
# Create socket and bind to address
UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)
# Receive messages
while 1:
data,addr = UDPSock.recvfrom(buf)
if not data:
print "Client has exited!"
break
else:
print "\nReceived message '", data,"' from ", addr
# Close socket
UDPSock.close()
答案 0 :(得分:4)
60471是客户端的端口,21567是服务器的端口。它们不能相同:任何IP流量都必须声明其源地址和端口,以及其目标地址和端口。客户端端口通常是32768到65535范围内的随机数。addr
告诉您客户端的地址。
这样做可以让多个客户端与同一服务器通信(即IP地址和端口组合),并且可以使用客户端端口号消除流的歧义,即使使用UDP / IP等无连接协议也是如此。
答案 1 :(得分:2)
您要打印的端口是发件人的端口。客户端的端口始终是随机的,标准的操作系统机制。就像Web服务器的端口是80,但是当您的计算机连接到服务器时,您每次都会使用随机端口退出。