检测插槽是否有错误的IP并且无法连接

时间:2015-05-25 09:58:32

标签: java android sockets

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

有没有办法在创建套接字之前检查一台机器是否可以接受连接?或者从中产生错误?或者周围的任何方式?

谢谢。

PS:UnknownHostException仅在以错误格式写入IP时抛出,而不是在它无效时抛出。

1 个答案:

答案 0 :(得分:3)

  

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

不,不。它会阻止平台超时,大约一分钟。如果您的应用程序冻结,则表示您正在GUI线程而不是自己的线程上执行此操作。您可以按如下方式缩短超时:

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

其中timeout以毫秒为单位。请注意,除非在Javadoc中说明,否则无法将其增加到平台默认值之外。零在这里不是“无限”,它是平台的默认值。

  

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

你的意思是预测未来?算命?否。

  

或者从中产生错误?

见上文。

  

还是周围的任何方式?

见上文。