相关疑难解决方法(0)

Java - "没有可用的缓冲区空间"套接字错误原因?

我正在用Java编写网络程序.我使用ServerSocket和Socket对象使用TCP发送和接收消息.我的程序如果运行一小段时间运行正常但是如果我运行它的时间较长,我会收到以下错误:

java.net.SocketException: No buffer space available (maximum connections reached?): connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

我认为这可能是因为我没有关闭所有套接字但是我已经改变了我的代码:当我想要一个新的套接字并添加了一个finalize方法来关闭它时,我创建了一个类.我还有一个关闭ServerSocket的finalize方法,所以我不知道问题是什么.

在我收到错误之后,如果我立即再次运行程序,它会比以前更快地遇到问题.然后,如果我等待一段时间并运行它,它会回到原来的时间.

我真的无法解决这个问题,而且我一直试图弄清楚这个问题.有谁知道问题是什么?

提前致谢!

更新:

所以我已经弄清楚了错误的来源,这真的很奇怪.我有以下代码导致问题:

try {
        sock = new Socket(InetAddress.getByName(ipaddr), port);
        sock.close();

        // os = sock.getOutputStream();
        // byte[] arr = s.getBytes();
        // os.write(arr);
        // os.close();

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            sock.close();
        } catch (Exception e) …
Run Code Online (Sandbox Code Playgroud)

java sockets buffer tcp serversocket

0
推荐指数
1
解决办法
2618
查看次数

标签 统计

buffer ×1

java ×1

serversocket ×1

sockets ×1

tcp ×1