socket.bind() 与 socket.listen()

Ami*_*bay 6 python sockets

我已经学会了如何编写 python 服务器,并发现我的知识有一个漏洞。因此,我很高兴了解更多有关套接字模块的命令bind()之间的差异的信息。listen()

此外,当我使用bind()特定端口作为参数时,在使用该listen()方法之前,该特定端口是否已经在使用中?!

nic*_*las 8

我找到了一个教程,里面有详细的解释:

... bind()用于将套接字与服务器地址关联起来。

调用listen()将套接字置于服务器模式,并且accept()等待传入连接。

listen()这就是服务器套接字与客户端的区别。


一旦bind()被调用,该端口现在就被保留,并且不能再次使用,直到程序结束或close()在套接字上调用该方法。

演示这一点的测试程序如下:

import socket
import time

HOST = '127.0.0.1'
PORT = 65432

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
while 1:
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

当同时运行该程序的两个实例时,您可以看到最后启动的一个出现错误:

错误图像

这证明该端口在listen()被调用之前就已被保留。