Java 套接字异常 : No buffer space available

标签 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)

我使用的是 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/

相关文章:

java - 使用动态字段反序列化嵌套 XML

java - gitlab-CI 不使用 maven 和 java 10 构建?

java - 如何删除tomcat jsp中的 session ?

无法将缓冲区的内容复制到 C 中的字符串 : reading from . bin 文件中

c++ - 如何在 C++ 中处理完整的 CircularBuffer

c - 使用 memcpy 获取缓冲区

sql命令占用大量空间

java - FileInputStream读取方法的风格

python - 设置第一个 x 刻度 (0) 和 y 轴的间距

html - 如何使用 HTML/CSS 在文本中插入空格/制表符