Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java套接字:如何防止Java.net.BindException_Java_Sockets_Serversocket - Fatal编程技术网

Java套接字:如何防止Java.net.BindException

Java套接字:如何防止Java.net.BindException,java,sockets,serversocket,Java,Sockets,Serversocket,我在同一台计算机上实现了一个局域网游戏和测试,方法是:创建一个类,在这个类的不同线程中创建一个服务器和一个客户端,然后连接在一起 在我关闭两个windows客户机和服务器并再次执行上述步骤后:运行java类,创建一个服务器和一个客户机。我总是遇到这样的错误:java.net.BindException,因为这个端口以前创建过,现在还没有关闭 每次我创建服务器套接字时,在catch中,我总是将serverSocket.close放入。但这个错误仍然困扰着我。请给我一些想法来防止这种情况 @:如果我

我在同一台计算机上实现了一个局域网游戏和测试,方法是:创建一个类,在这个类的不同线程中创建一个服务器和一个客户端,然后连接在一起

在我关闭两个windows客户机和服务器并再次执行上述步骤后:运行java类,创建一个服务器和一个客户机。我总是遇到这样的错误:java.net.BindException,因为这个端口以前创建过,现在还没有关闭

每次我创建服务器套接字时,在catch中,我总是将serverSocket.close放入。但这个错误仍然困扰着我。请给我一些想法来防止这种情况

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


谢谢:

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

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

除非出现异常,否则不会运行catch块中的任何内容他被抓住了。相反,将close调用放在finally块中,以确保它始终运行。

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

在通道上调用close之后可能还不够。请参见此处的说明: TCP连接可以保持在CLOSE-WAIT或TIME-WAIT状态。 你可以重复使用这个地址,这样你就可以重复使用eaddr了,但这对我不起作用。 最好是准确等待网络级别上为CLOSE-wait或TIME-wait设置的超时。

在调用通道上的CLOSE之后可能还不够。请参见此处的说明: TCP连接可以保持在CLOSE-WAIT或TIME-WAIT状态。 你可以重复使用这个地址,这样你就可以重复使用eaddr了,但这对我不起作用。 最好的方法是准确地等待网络级别上为CLOSE-wait或TIME-wait设置的超时