【问题标题】:Java socket : how to prevent java.net.BindExceptionJava 套接字:如何防止 java.net.BindException
【发布时间】:2012-10-08 19:01:48
【问题描述】:

我已经实现了一个局域网游戏并在同一台计算机上通过以下方式进行测试:创建一个类,在该类的不同线程中创建一个服务器和一个客户端并连接在一起。

关闭两个窗口(客户端和服务器)并再次执行上述步骤后:运行 java 类,创建服务器和客户端。我总是遇到这个错误:java.net.BindException(因为这个端口之前已经创建并且还没有关闭)。

每次我创建服务器套接字时,我总是输入serverSocket.close()。但是那个错误仍然遇到了我。请给我一些想法来防止这种情况发生。

@ : 如果我们知道已经创建了一个端口,我们可以关闭它并创建新的吗?

谢谢:)

【问题讨论】:

    标签: java sockets serversocket


    【解决方案1】:

    除非捕获到异常,否则任何放入 catch 块中的内容都不会运行。相反,将 close() 调用放在 finally 块中以确保它始终运行。

    【讨论】:

      【解决方案2】:

      您应该将 serverSocket.close() 放在 finally 块中,并可能等待几秒钟,然后再尝试绑定到该地址。

      【讨论】:

        【解决方案3】:

        在频道上调用close() 之后可能还不够。请参阅此处的说明:http://hea-www.harvard.edu/~fine/Tech/addrinuse.html TCP 连接可以保持在 CLOSE-WAIT 或 TIME-WAIT 状态。 您可以重用地址(SO_REUSEADDR),但它对我不起作用。 最好的办法是准确等待网络级别为 CLOSE-WAIT 或 TIME-WAIT 设置的超时时间。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-14
          • 2013-05-19
          • 1970-01-01
          • 2013-06-30
          • 1970-01-01
          • 2012-01-14
          相关资源
          最近更新 更多