Java SocketException:没有可用的缓冲区空间

tul*_*s85 4 java buffer space socketexception

我的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)
Run Code Online (Sandbox Code Playgroud)

我使用Windows XP SP3,有几个这样的帖子(这里),但是没有人对此问题发表意见。我还安装了Windows补丁程序,以消除对TCP连接的限制,但我没有解决问题。

jjm*_*tes 5

该消息表明您可能已用尽连接。你检查了吗?您可以使用以下命令从命令行检查打开的套接字:

netstat -n
Run Code Online (Sandbox Code Playgroud)

确保关闭两侧的所有插槽(最后一块)。请记住,侦听套接字在收到连接后保持打开状态。不要太快地打开和关闭套接字(我想说它们不能立即重用,这可能与您的问题有关)。

为了获得与套接字相关的更好的性能,可以使用java.nio API,但是它比java.net复杂得多。