Python UDP套接字端口随机,尽管分配

时间:2009-12-27 22:13:17

标签: python sockets udp

我有两个简单的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.py

# 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.py

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

2 个答案:

答案 0 :(得分:4)

60471是客户端的端口,21567是服务器的端口。它们不能相同:任何IP流量都必须声明其源地址和端口,以及其目标地址和端口。客户端端口通常是32768到65535范围内的随机数。addr告诉您客户端的地址。

这样做可以让多个客户端与同一服务器通信(即IP地址和端口组合),并且可以使用客户端端口号消除流的歧义,即使使用UDP / IP等无连接协议也是如此。

答案 1 :(得分:2)

您要打印的端口是发件人的端口。客户端的端口始终是随机的,标准的操作系统机制。就像Web服务器的端口是80,但是当您的计算机连接到服务器时,您每次都会使用随机端口退出。