我正在尝试通过使用 与本地网络上的设备建立通信Socket
,并使用该方法验证连接Socket.isConnected()
- 看起来很简单,但我遇到了一些奇怪的行为。
目前,我使用无参数Socket()
构造函数实例化一个未连接的套接字,然后在准备好后连接到服务器(位于设备的端口 80 上)。这是代码片段:
deviceSocket = new Socket();
...
SocketAddress deviceSocketAddress = new InetSocketAddress(hostName, portNum);
deviceSocket.connect(deviceSocketAddress);
if (deviceSocket.isConnected()){
System.out.println("Connected to "+hostName+":"+portNum);
}
如前所述,portNum
我必须在设备上连接的 80 是 80,但无论hostName
提供什么,它总是返回true
. 如果我给出一个 10.0.1.115 的 IP 地址(这是设备的地址),我得到的结果与我提供 10.0.1.114 时的结果相同,甚至是像 13.2.5.2 这样的虚假地址。
我已经做了一些研究,发现如果套接字已成功连接,该Socket.isConnected()
方法将返回true
,但这不是我的问题,我确保在每种情况下我都从一个全新的未连接套接字开始.
我决定把我的问题带到 telnet 上,我在其中发现了一些非常奇怪的东西。如果在telnet xxx.xxx.xxx.xxx 80
命令提示符下发出命令,它总是会打开一个空白页面,该页面会挂起一段时间,然后退出到命令提示符,而不是给出适当的错误消息(假设端点确实不存在)
Connecting to 13.2.5.2... Could not open connection to the host, on port 82: Connect failed
(此外,还有一些奇怪的事情,使用端口 81 的行为方式相同,只有当我使用 82 或其他随机端口时,连接才会失败)
所以我想我偶然发现了一个有趣的问题,但我们很快就会看到......
在此先感谢您的所有回复!
-M