我正在Android上创建一个应用程序,通过套接字连接到我的PC上的服务器。该应用程序有一个主机列表,用户按下他想要连接的主机。问题是,如果他按下当前未连接的主机(即服务器端程序未运行,或机器已关闭),则应用程序冻结。我发现该应用永远停留在这行代码sck = new Socket(ip, 8081);
上。
有没有办法在创建套接字之前检查一台机器是否可以接受连接?或者从中产生错误?或者周围的任何方式?
谢谢。
PS:UnknownHostException
仅在以错误格式写入IP时抛出,而不是在它无效时抛出。
答案 0 :(得分:3)
我检测到应用程序停留在这行代码上sck = new Socket(ip,8081);永远。
不,不。它会阻止平台超时,大约一分钟。如果您的应用程序冻结,则表示您正在GUI线程而不是自己的线程上执行此操作。您可以按如下方式缩短超时:
Socket sck = new Socket();
sck.connect(new InetSocketAddress(ip, port), timeout);
其中timeout
以毫秒为单位。请注意,除非在Javadoc中说明,否则无法将其增加到平台默认值之外。零在这里不是“无限”,它是平台的默认值。
有没有办法在创建套接字之前检查一台机器是否可以接受连接?
你的意思是预测未来?算命?否。
或者从中产生错误?
见上文。
还是周围的任何方式?
见上文。