java - 检测套接字是否有错误的IP并且无法连接

标签 java android sockets

我正在 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/

相关文章:

java - 在 ActionListener 中持续设置 JTextArea 文本

java - 使用 Java、Hibernate 和 JPA 将 MySQL latin1 转换为 UTF-8

android - 如何使用Gradle任务从命令行获取参数?

java - Android开发-使用多个图像按钮

c - 未正确发送文件。 socket 。 C

python - Python 中套接字接收的习惯用法

java - SymmetricDS:我应该使用哪种方法来同步特定表?

java - 如何在java中读取带有属性的xml文件?

android - Android 上的 TextInputLayout 默认错误颜色

node.js - 在断开连接事件中重新连接套接字