【发布时间】:2017-09-24 07:15:02
【问题描述】:
在我的应用程序中,我正在循环等待服务器可用:
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() 永远不会成功的原因?
谢谢!
【问题讨论】:
-
@LunarWatcher ??他不是在监听客户端连接,而是想以作为客户端连接。
-
@LunarWatcher 你在说什么?服务器在另一端。如果它没有在监听,连接将失败。这正是这里发生的事情。问题是为什么当服务器可用时它仍然失败。
-
@LunarWatcher 这不是服务器问题,连接到它可以与其他类型的客户端正常工作。如果你能这么好心地专注于这个问题而不是给毫无意义的 cmets,那就太好了
-
嗯,不确定连接异常后对象的状态是否保持错误状态。您是否尝试过在 catch 块中简单地执行
sock = new Socket();? -
如 API 中所述“一旦套接字被关闭,它就不能用于进一步的网络使用(即不能重新连接或重新连接)。需要创建一个新的套接字。”
标签: java android sockets tcpclient tcp-ip