请忽略已被请求删除的问题。 请查看评论。
以下代码始终抛出
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);
有人可以对此有所了解吗?
答案 0 :(得分:1)
为什么在重新连接之前关闭套接字后需要等待?
不是。
这不是睡眠,而是new Socket()
行。
显然,您的第一段代码并不准确。您收到SocketException: socket closed
,表示您正在尝试重新连接原始套接字,因此当您运行它时,显然没有new Socket()
行。
这也解释了为什么调用setReuseAddress()
没有任何区别。这只会对BindException,
有所帮助,如果您尝试使用相同的本地IP地址和端口进行连接,则只能使用您未执行的4参数connect(),
。< / p>