[英]Socket AsyncTask does not log the socket.isConnected value in the code
[英]Java - socket.isConnected returns true to ANY ip address using port 80
我试图通过使用Socket
与本地网络上的设备建立通信,并使用Socket.isConnected()
方法验证连接-看起来很简单,但出现了一些奇怪的现象。
当前,我使用no-arg 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,但是无论所提供的hostName
为何,它始终返回true
。 如果我提供的IP地址为10.0.1.115(这是设备的地址),则得到的结果与提供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
我无法复制这种行为,但这是一个猜测。
您的防火墙允许端口80(http)和81(通常用作http备用端口)。 这些端口会尝试,然后在超时后无法连接。 防火墙中未打开的其他端口(例如82)将立即被拒绝。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.