2015-05-25 26 views
1

我正在Android上创建一个应用程序,该应用程序通过套接字连接到PC上的服务器。应用程序有一个主机列表,用户按下他想要连接的那一刻。问题在于,如果他按下了当前未连接的主机(即服务器端程序未运行或机器关闭),则应用程序将冻结。我发现应用永远停留在这行代码sck = new Socket(ip, 8081);上。检测套接字是否有错误的IP并且无法连接

有什么方法可以在创建套接字之前检查机器是否可以接受连接?或者从此产生一个错误?或以任何方式呢?

谢谢。

PS:UnknownHostException仅在IP写入格式错误时引发,而不是如果无效。

回答

3

我检测到应用程序停留在这行代码上sck = new Socket(ip,8081);永远。

不,它不。它会阻止平台超时,这是大约一分钟的时间。如果你的应用程序冻结它意味着你正在GUI线程而不是它自己的线程上执行此操作。您可以缩短超时如下:

Socket sck = new Socket(); 
sck.connect(new InetSocketAddress(ip, port), timeout); 

其中timeout以毫秒为单位。请注意,尽管它在Javadoc中说了什么,但无法将其增加到平台默认值以外。零在这里不是'无限',它是平台默认的。

有没有什么办法可以在创建套接字之前检查机器是否可以接受连接?

你是指像预言未来?算命?

或者由此产生一个错误?

见上文。

或者任何方式吗?

见上文。

+0

您刚刚保存了我的高级项目。非常感谢你!!! – LedZep

相关问题