我正在 Android 上创建一个应用程序,它通过套接字连接到我 PC 上的服务器。该应用程序有一个主机列表,用户按下他现在想要连接的主机。问题是,如果他按下当前未连接的主机(即服务器端程序未运行,或机器已关闭),应用程序将卡住。我检测到该应用程序永远停留在这行代码 sck = new Socket(ip, 8081);
上。
有什么方法可以在创建套接字之前检查机器是否可以接受连接?或者由此产生错误?或者有什么办法吗?
谢谢。
PS:UnknownHostException
只会在IP格式写错时抛出,无效时不会抛出。
最佳答案
I detected that the app stays on this line of code sck = new Socket(ip, 8081); forever.
不,它没有。它阻止平台超时,大约一分钟。如果您的应用程序卡住,则意味着您正在 GUI 线程而不是它自己的线程上执行此操作。您可以按如下方式缩短超时:
Socket sck = new Socket();
sck.connect(new InetSocketAddress(ip, port), timeout);
timeout
以毫秒为单位。请注意,您不能将其增加到平台默认值之外,尽管它在 Javadoc 中有说明。零在这里不是“无限”,它是平台默认值。
Is there any way to check if a machine can accept connections before creating the socket?
你的意思是像预知 future ?算命?没有。
Or generating an error from this?
见上文。
Or any way around it?
见上文。
关于java - 检测套接字是否有错误的IP并且无法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30435655/