问题:Python/Selenium中的套接字错误[地址已在使用]

2 投票
4 回答
16202 浏览
提问于 2025-04-16 18:36

我遇到了一个麻烦的问题,错误信息是socket.error错误: [Errno 10048]: 地址已在使用中。每个套接字地址(协议/IP地址/端口)通常只允许一个使用。这个问题发生在我用Python和Selenium进行自动化测试的时候。奇怪的是,这个问题在一台机器(Linux)上运行正常,但在另一台机器(WindowsXP)上却出现了这个错误。

我想补充一下,这个问题是在我重新安装系统并重新设置一切之后出现的,之前的配置下是没有问题的。

我是不是忘记了什么?有没有人遇到过类似的问题?

有没有人知道该怎么解决这个问题?

当前的配置/库:

python 2.7, numpy, selenium.py

4 个回答

0

这里有几种可能性。如果你的测试都无法在某个端口上监听(你没有说明是哪个端口),那么可能是你的Windows电脑上有其他程序正在使用一个你之前开放的端口;这个新服务可能是在你重新安装时出现的。另一方面,如果只是某些测试有问题,或者问题偶尔出现,那可能是编程上的问题(比如在早期的测试中忘记关闭一个连接,导致后面的测试受到影响)或者是时间上的问题(早期测试的连接还没完全关闭,新的测试就想要打开)。显然,解决这些问题的方法各不相同,但如果没有更多的细节,我们可能无法提供更多帮助。

1

如果你多次打开或关闭一个网络连接(也叫socket),它可能会处于一个叫做TIME_WAIT的状态。这就是为什么在不同的平台上,它的表现会有所不同,因为不同的平台有不同的TIME_WAIT设置和TCP协议栈。如果你在控制这个socket对象,可以在绑定之前设置SO_REUSEADDR,这样就能解决这个问题。

举个例子:

sock = socket.socket()
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, server.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) | 1)

你可以在命令提示符下运行 netstat -b,这样可以列出所有打开的socket,包括它们的状态和所属的进程。

1

我在下面的帖子中找到了答案:

Python urllib2. URLError: <urlopen 错误 [Errno 10048] 每个套接字地址(协议/网络地址/端口)通常只允许使用一次>

结果发现,这个问题是Windows的一个限制。

撰写回答