Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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中的socket.accept();如何设置连接端口的客户端_Python_Python 3.x_Python Sockets - Fatal编程技术网

python中的socket.accept();如何设置连接端口的客户端

python中的socket.accept();如何设置连接端口的客户端,python,python-3.x,python-sockets,Python,Python 3.x,Python Sockets,在发布我长达一英里的脚本时,这里有一个简短的示例:我正在运行以下脚本之一的两台计算机之间创建TCP/IP连接: 服务器: # server.py import socket s = socket.socket() host = socket.gethostname() port = 1234 s.bind((host, port)) s.listen(5) while True: c, addr = s.accept() print 'Connection from', a

在发布我长达一英里的脚本时,这里有一个简短的示例:我正在运行以下脚本之一的两台计算机之间创建TCP/IP连接:

服务器:

# server.py
import socket

s = socket.socket()
host = socket.gethostname()
port = 1234
s.bind((host, port))

s.listen(5)

while True:
    c, addr = s.accept()
    print 'Connection from', addr
    c.close()
客户:

#client.py
import socket

s = socket.socket()

host = socket.socket()
port = 1234

s.connect((host, port))
print s.recv(1024)
这给了我一个很好的解释,比如:

Connection from ('19*.1**.0.**', 54451)
Connection from ('19*.1**.0.**', 54452)
Connection from ('19*.1**.0.**', 54453)
Connection from ('19*.1**.0.**', 54454)
是什么控制54451-54454号码的创建?我明白这是什么;分配给客户端连接的端口号。我似乎不知道如何控制这个数字,或者至少控制它的发行范围


这可能吗?任何建议都会大有帮助。提前感谢。

通常,如果您自己没有分配端口ID,您的操作系统或运行时系统会分配端口ID

TCP特别是每个连接有两个端口:一个源端口和一个目标端口,有时称为本地端口和远程端口。使用
s.bind
设置服务器上的本地端口,而不设置任何远程端口(这很有意义:还没有实际连接)。使用
s.connect
设置客户端上的远程(目标)端口,而不设置任何本地端口

当客户端向服务器发送连接请求时,客户端需要一个本地端口。因为它还没有,所以操作系统或运行时系统会从可用端口ID池中选择一个。然后,它将该ID绑定到客户端套接字的本地端
s
,并发送一个请求,其中包含(我假设这里是192.168 RFC-1918专用地址空间):

(零表示“未分配”,因此本地IP地址未设置。您可以设置特定的IP地址,如果您的主机是多宿主机,这将非常有用。)

<local-addr=192.168.xxx.xxx, local-port=54451, remote-addr=S, remote-port=1234>
<local-addr=S, local-port=1234, remote-addr=192.168.xxx.xxx, remote-port=54451>
s.bind((0, port))