套接字无法连接

时间:2017-09-15 12:25:02

标签: java android sockets tcpclient tcp-ip

在我的应用程序中,我正在等待服务器在循环中可用:

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()永远不会成功的原因?

谢谢!

1 个答案:

答案 0 :(得分:1)

socket会记住其错误状态,不能用于重试connect()。您必须在每connect()之前创建一个新套接字。套接字很便宜,所以我不担心开销。

或者你可以尝试在尝试connect()之前ping服务器,但我认为这不值得付出努力(并且它也不那么强大)。