在重新连接之前,为什么在套接字关闭后需要等待?

时间:2015-05-16 17:54:32

标签: android sockets

请忽略已被请求删除的问题。 请查看评论。

以下代码始终抛出

java.net.SocketException: Socket closed

在最后一个声明(socket.connect(myInetSocketAddress, 6000);

Socket socket = new Socket();
socket.connect( myInetSocketAddress, 6000);

//use socket to do some reading
...

socket.close();
socket = new Socket();
//The following is bound to throw java.net.SocketException: Socket closed
socket.connect(myInetSocketAddress, 6000);

如果添加等待(Sleep()),一切都会正常如下:

Socket socket = new Socket();
socket.connect( myInetSocketAddress, 6000);

//use socket to do some reading
...

socket.close();
Thread.sleep(1000);  //critical to prevent java.net.SocketException: Socket closed
socket = new Socket();
//The following works fine after Thread.sleep(1000)
socket.connect(myInetSocketAddress, 6000);

有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:1)

  

为什么在重新连接之前关闭套接字后需要等待?

不是。

这不是睡眠,而是new Socket()行。

显然,您的第一段代码并不准确。您收到SocketException: socket closed,表示您正在尝试重新连接原始套接字,因此当您运行它时,显然没有new Socket()行。

这也解释了为什么调用setReuseAddress()没有任何区别。这只会对BindException,有所帮助,如果您尝试使用相同的本地IP地址和端口进行连接,则只能使用您未执行的4参数connect(),。< / p>

相关问题