java.net.SocketException: No buffer space available (maximum connections reached
?): recv failed
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.net.SocketInputStream.read(SocketInputStream.java:90)----------代码
private static final int SOCKETRECVBUFFER = 64 * 1024 * 4 * 4;//加大了也没有用 try {
socket = new Socket();
try {
socket.setReceiveBufferSize(SOCKETRECVBUFFER);
} catch (SocketException e) {
log.info("setReceiveBufferSize failed!", e);
}
socket.connect(new InetSocketAddress(host, port));
} catch (SocketException e) {
log.info("setReceiveBufferSize failed!", e);
} catch (IOException ee) {
log.info(ee + " NE fail. neIPAddr = " + host + ", remotePort = "
+ port);
throw ee;
}
try {
this.outputStream = socket.getOutputStream();
this.inputStream = socket.getInputStream();
} catch (IOException ee) {
log.warn("open in/out stream of this socket fail. localPort = "
+ socket.getLocalPort(), ee);
throw ee;
} byte[] buffer = new byte[10240];
int length = -2;
if (this.inputStream != null) {
length = this.inputStream.read(buffer); // IOException,就这个地方

解决方案 »

  1.   

    这跟你的程序没有关系,是因为你的主机的主板是华硕的并且你的操作系统是win2000。
    http://forum.java.sun.com
    http://www.cjsdn.net/post/view?bid=10&id=154857&sty=1&tpg=1&age=0
      

  2.   

    谢谢sandyen(杉叶)的回答,我在网上也搜到这个,但是不是这个原因。
    问题已解决,确实不是程序的问题。
    netstat -an发现有大量的端口占用,监听很多机器的139,445端口。
    确定机器中了震荡波,下载补丁安装重启,问题解决。
    导致这个异常的原因应该是系统的socket大量的资源被占用,
    导致没有足够的资源接收前台上报或者回复的数据。
      

  3.   

    你下载的是那个补丁?
    service pack? version?
      

  4.   

    震荡波病毒补丁
    Windows2000-KB835732-x86-CHS.EXE