0

我需要使用 Java 创建 1000 个服务器套接字。在创建 600 和 700 个套接字之间的某个地方出现此错误:

05.04.2012 10:23:57 java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?):在 sun.nio.ch.ServerSocketChannelImpl.bind 处监听 sun.nio.ch.ServerSocketChannelImpl.listen(Native Method) (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)

之后我的电脑重新启动。我尝试编辑注册表设置 MaxUserPort = 65534 和 MaxFreeTcbs = 2000,但没有帮助。我还可以做些什么?在http://serverfault.com上有人告诉我它可能与 JDBC 有关,但我只连接到 DB 一次。我使用 SQLite。有什么建议么?

4

2 回答 2

0

在 Windows XP 上对半开连接有限制以打破此规则,您需要修补您的 tcpip.sys 驱动程序(但它是非法的)或使用像 Windows Vista/7 这样的现代操作系统,它们没有这些限制。

于 2012-04-05T08:30:29.923 回答
0

以防万一有人也遇到这个问题。
最后,在我看来,这只是 WinXP 的问题。我用更多的 RAM 尝试了相同的代码 - 结果是一样的。但是当我在 Win7 上尝试过时,即使有 1200 个套接字,一切正常。
所以,WinXP 就是不适合这样的任务。

于 2012-04-11T09:20:58.967 回答