在我的应用程序中,我正在循环等待服务器可用:
Socket sock=new Socket(); // create the socket object
while (running) // a more or less endless loop
{
try
{
sock.connect(new InetSocketAddress(data.host,11355),1000); // try to connect to the server
...
// when everything goes well, we do something with the "sock"
}
catch (IOException ioe)
{
// conection could not be established
try
{
Thread.sleep(1000); // wait for one second until next connection attempt
}
catch (InterruptedException ie)
{
}
}
}
这个想法是尝试建立与服务器的连接,当失败时,connect() 会抛出异常,我会在延迟一秒后重试。
我的问题:它不起作用。当服务器在应用程序启动时不可用但稍后可以访问时,connect() 不成功,它无法连接到服务器。仅当服务器可用于第一个 connect() 时,此代码才能正常工作。
那么这里可能出了什么问题呢?我必须以某种方式重置套接字吗?或者还有什么可能是后来调用 connect() 永远不会成功的原因?
谢谢!
最佳答案
socket
会记住其错误状态,并且不能用于重试 connect()
。您必须在每次 connect()
之前创建一个新套接字。套接字很便宜,所以我不担心开销。
或者,您可以在尝试 connect()
之前尝试 ping 服务器,但我认为这不值得付出努力(而且它的鲁棒性也较差)。
关于java - 套接字未连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46239549/