【问题标题】:How long does it take for the OS to close the socket after calling close() method in java?在java中调用close()方法后操作系统关闭套接字需要多长时间?
【发布时间】:2012-02-18 11:37:12
【问题描述】:

我正在用 Java 进行一些网络编程。在一个循环中,我打开一个套接字,发送一些数据并关闭它。但我得到了“连接已在使用”的例外。我猜这是因为我在每次循环重复时使用相同的端口。操作系统(Ubuntu 11.10)关闭套接字并释放端口需要多长时间?谢谢

简化后的代码如下所示

while(true){
            Socket clientSocket = new Socket("localhost", 5000);
            PrintWriter outToServer = new PrintWriter( clientSocket.getOutputStream(),true);    
            outToServer.println ("Hi") ;
            clientSocket.close();   
        }

【问题讨论】:

标签: java sockets ubuntu


【解决方案1】:

可能需要相当长的时间(例如,如果有未发送的数据,则最多需要 3 分钟)

在您的情况下,您每次都使用不同的本地端口(相同的远程端口无关紧要),所以没关系。

顺便说一句:创建一个新连接非常昂贵,我会尝试重复使用一个连接而不是每次都打开一个新连接。在上面的示例中,它可能快 1000 倍。 ;)

【讨论】:

  • 谢谢,但在我的真实代码中它不是本地主机,并且在循环中我必须将相同的数据发送到多个服务器套接字,这就是我每次打开一个新连接的原因。例如在 utorrent 这样的 Bittorrent 客户端中,它是否会在我的计算机上打开许多具有不同端口的连接?
猜你喜欢
  • 2016-07-01
  • 2017-09-05
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多