“java.net.BindException:地址已经在使用中”,当尝试为负载测试进行快速套接字创建和销毁时
我正在尝试通过打开与服务器的大量套接字连接,进行身份验证,关闭连接,然后重复来对Java服务器进行负载测试。我的应用程序运行了一段时间,但最终我得到了:
java.net.BindException: Address 已在使用中: connect
根据我阅读的文档,这样做的原因是,在调用 close() 后,已关闭的套接字在一段时间内仍然占用分配给它们的本地地址。这取决于操作系统,但可以在几分钟内完成。我尝试调用套接字,希望它的地址在被调用后立即可重用。不幸的是,情况似乎并非如此。setReuseAddress(true)
close()
我的套接字创建代码是:
Socket socket = new Socket();
socket.setReuseAddress(true);
socket.connect(new InetSocketAddress(m_host, m_port));
但我仍然收到此错误:
java.net.BindException:地址已经在使用中:一段时间后连接。
有没有其他方法可以完成我想要做的事情?例如,我想:打开100个套接字,全部关闭,打开200个套接字,全部关闭,打开300个,等等,最多2000个左右的套接字。
任何帮助将不胜感激!