繁体   English   中英

Java-socket.isConnected使用端口80将true返回到任何IP地址

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM