Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python UDP套接字端口随机,不考虑分配_Python_Sockets_Udp - Fatal编程技术网

Python UDP套接字端口随机,不考虑分配

Python UDP套接字端口随机,不考虑分配,python,sockets,udp,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和server.py。客户端只需通过UDP套接字将您键入的文本发送到服务器

分配和侦听的端口为21567,但。。。该行内容如下:

print "\nReceived message '", data,"' from ", addr
在server.py中,addr输出如下:('127.0.0.1',60471)

现在我不明白为什么会报告这个看似随机的端口,每次脚本运行时60471都是随机的。有谁能解释一下这件事,为什么不说代码中设置的21567?谢谢

Python脚本文件内容如下:

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


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

您正在打印的端口是发送方的端口。客户端的端口总是随机的,标准的操作系统机制。就像web服务器的端口是80,但是当您的计算机连接到服务器时,每次都会有一个随机端口退出。

PS:这是我第一天尝试编写一些Python来做一些事情,尽管上面的代码片段来自某个教程网站。如此赤裸裸地铭记在心:“Josamoto”!=“Python Pro”:)酷!换句话说,一切都正常运转!实际上,客户端和服务器端口可以相同。但是,除非服务器对客户端端口有特定的要求(例如出于安全目的),否则它们是无关的。客户端端口并不总是随机的。有一个原因是
bind
listen
是两个独立的调用;只有“服务器”套接字侦听,但“客户端”和“服务器”端口都可以绑定。
# 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()