2

我有一个麻烦的问题socket.error error: [Errno 10048]: Address already in use。在使用 Selenium 和 Python 进行自动化测试期间,每个套接字地址(协议/IP 地址/端口)通常只允许使用一次。这个问题非常有趣,它在一台机器(Linux)上运行正常,但在另一台机器(WindowsXP)上会产生这个错误。我要补充一点,在重新安装系统并重新设置后出现问题 - 使用以前的配置一切正常。是不是我忘记了什么?有没有人提出过这样的问题?

有谁知道如何处理这个问题?

当前配置/库:

python 2.7,numpy,selenium.py

4

4 回答 4

1

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

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

原来这个问题是Windows的限制

于 2011-05-31T06:15:24.330 回答
1

如果您多次打开/关闭套接字,它可能处于 TIME_WAIT 状态。这可以解释为什么它在不同平台上的行为不同(不同的 TIME_WAIT 设置和 TCP 堆栈)。如果您正在控制套接字对象,则可以在绑定之前设置 SO_REUSEADDR 以解决问题。

例如:

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

您可以netstat -b从命令提示符运行,为您提供带有状态和拥有进程的打开套接字列表。

于 2011-05-30T13:30:09.827 回答
0

有几种可能性。如果您的任何测试都不能在某个端口上侦听(您没有说什么端口),那么您的 Windows 机器可能正在您之前打开的端口上运行某些东西;此新服务可能在重新安装期间出现。另一方面,如果它只是某些测试的问题,或者它有点零星,那么它可能是一个编程问题(忘记在早期测试中关闭一个套接字,这会干扰后面的测试)或时间问题(在新的尝试打开之前,早期测试的套接字并没有完全关闭)。显然有不同的方法来解决这些问题,但我认为如果没有更多细节,我们无法提供更多帮助。

于 2011-05-30T12:51:23.403 回答
0

也许您的 Windows 上有一个软件已经使用端口 4444,您可以尝试将 Selenium 设置为另一个端口并重试吗?

于 2011-05-30T13:33:10.260 回答