簡體   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