1

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

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

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

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

谢谢 :)

4

3 回答 3

2

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

于 2012-10-08T19:03:35.853 回答
2

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

于 2012-10-08T19:04:52.220 回答
0

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

于 2014-05-14T08:16:52.807 回答