在我的应用程序中,我正在等待服务器在循环中可用:
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()永远不会成功的原因?
谢谢!
答案 0 :(得分:1)
socket
会记住其错误状态,不能用于重试connect()
。您必须在每connect()
之前创建一个新套接字。套接字很便宜,所以我不担心开销。
或者你可以尝试在尝试connect()
之前ping服务器,但我认为这不值得付出努力(并且它也不那么强大)。