![](/img/trans.png)
[英]Apache DefaultHttpClient - java.net.BindException: Address already in use: connect
[英]Webdriver: java.net.BindException: Address already in use: connect
在运行webdriver时,运行3分钟后,我收到以下异常并且Webdriver崩溃。
我只使用一个webdriver实例和一个FirefoxDriver配置文件。
Exception in thread "main" org.openqa.selenium.WebDriverException:
java.net.BindException: Address already in use: connect
System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1',
java.version: '1.6.0_18'
Driver info: driver.version: remote
at
org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:
341)
at
org.openqa.selenium.firefox.FirefoxDriver.execute(FirefoxDriver.java:
234)
at
org.openqa.selenium.remote.RemoteWebDriver.findElements(RemoteWebDriver.java:
173)
at
org.openqa.selenium.remote.RemoteWebDriver.findElementsByXPath(RemoteWebDriver.java:
231)
at org.openqa.selenium.By$6.findElements(By.java:200)
at
org.openqa.selenium.remote.RemoteWebDriver.findElements(RemoteWebDriver.java:
158)
Caused by: java.net.BindException: Address already in use: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at
org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:
123)
at
org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:
133)
at
org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:
149)
at
org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:
108)
at
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:
415)
at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:
641)
at
org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:
211)
at
org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.execute(NewProfileExtensionConnection.java:
125)
at org.openqa.selenium.firefox.FirefoxDriver
$LazyCommandExecutor.execute(FirefoxDriver.java:341)
at
org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:
328)
... 11 more
您的出站端口已用完。 这意味着您在两分钟内就完成了数千个出站连接。 解决方案:使用连接池,或减慢程序速度。
我在一组机器中遇到了这个问题,其中一些运行Win2003,一些运行Windows7,许多运行Linux。 我发现关闭所有java进程并重新启动有一点帮助,特别是在结束运行java进程很多天之后。 并且, 在MSDN上避免TCP / IP端口耗尽的原因是 ,在Win2003计算机上运行独立的selenium网格作为集线器角色, MaxUserPort为10000 (默认值为5000的两倍), TcpTimedWaitDelay为30 (最小值)。 更改后重新启动 - 按照MSDN上的说明进行操作。
Windows“netstat -b”命令在Win2003机器上非常有用,以确认打开了数十个和几十个tcp / ip连接(端口4444和5555); 那些显然是Selenium Grid(v2)系统的一部分。
在Java中,我使用driver.quit(); 在每种测试方法的最后。 我尝试了driver.close()并且无法连续运行多个测试。
我现在可以运行250个测试,在Hub的java控制台上显示0个异常。
如果你的情况像我的,你在哪里
- 开放端口1
- 连接到机器
- ??
- 关闭端口1
- 开放端口1
- 连接到不同的机器
尝试添加socket.setSoLinger(true, 0);
直接在socket.close();
之前socket.close();
。
像这样:
socket.setSoLinger(true, 0);
socket.close();
这会强制操作系统释放套接字,而不是将其置于TIME_WAIT
状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.