我的 java 代码使用多个线程,每个线程运行一个 ServerSocket 并接受。 这些线程使用 java 套接字相互通信。 121 个线程都可以正常工作,但如果我用 256 个线程运行相同的代码,我会出现此错误:
java.net.SocketException: No buffer space available (maximum connections reached?): listen failed
at java.net.PlainSocketImpl.socketListen(Native Method)
at java.net.PlainSocketImpl.listen(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
我使用的是 windows xp sp3,有几个这样的帖子 (here ),但是没有人针对这个问题发布解决方案。我还安装了一个 Windows 补丁来取消对 TCP 连接的限制,但我没有解决我的问题。
最佳答案
该消息说您的连接可能已用完。你检查过了吗?您可以使用以下命令从命令行检查打开的套接字:
netstat -n
确保关闭两侧的所有套接字(在 finally block 中)。请记住,监听套接字在您收到连接后保持打开状态。不要太快打开和关闭套接字(我会说它们不能立即重复使用,这可能与您的问题有关)。
为了获得更好的套接字相关性能,您可以使用 java.nio API,但它比 java.net 复杂得多。
关于Java 套接字异常 : No buffer space available,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6363253/