我有和这里完全相同的问题:Windows XP TCP/IP 没有可用的缓冲区空间
在 Windows XP Pro, SP3 上,如果做一个实验,尝试循环打开 TCP/IP 套接字(基本上,监听端口 7000、监听端口 7001 等)
打开大约 649 个套接字后,将开始出现错误:没有可用的缓冲区空间(已达到最大连接数?)
我尝试按照此处所述编辑注册表http://smallvoid.com/article/winnt-tcpip-max-limit.html我设置了 MaxUserPort = 65534 和 MaxFreeTcbs = 2000,但没有帮助。
我还能做什么?我需要 1000 个服务器套接字。
这是错误堆栈:
2012 年 5 月 4 日 10:23:57 java.net.SocketException:无可用缓冲区空间(已达到最大连接数?):在 sun.nio.ch.ServerSocketChannelImpl.listen(本机方法)处监听,在 sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:127)处监听,在 sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59)处监听,在 sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:52)处监听,在 channelserver.NIOAppServer.initSelector(NIOAppServer.java:40)处监听,在 channelserver.NIOAppServer.(NIOAppServer.java:27)处监听,在 channelserver.NIOServer.main(NIOServer.java:433)处监听,在 channelserver.NIOServer.main(NIOServer.java:438)
答案1
以防有人也遇到这个问题。
最后我发现这只是 WinXP 的问题。我尝试使用更多 RAM 运行相同的代码 - 结果相同。但是当我在 Win7 上尝试时,即使有 1200 个套接字,一切都运行良好。
所以,WinXP 不适合这样的任务。