簡體   English   中英

Java socket 只使用 loopback

[英]Java socket only use loopback

我嘗試使用 java 插座將我的筆記本電腦連接到另一台筆記本電腦(在同一網絡上,均使用 Windows 10)。

這是客戶端代碼:

Socket SocketServIAChat;
try 
{
    SocketServIAChat = new Socket("192.168.1.10", 50065);
} 
catch (IOException ex) 
{
    jTextAreaErrorMessage.setText(ex.getMessage());
    return;
}

和服務器代碼:

try 
{
    listeningSocket = new ServerSocket(50065);
    listeningSocket.setSoTimeout(1500);
} 
catch (IOException ex) {
    Logger.getLogger(ThreadLoginRequests.class.getName()).log(Level.SEVERE, null, ex);}

...

Socket socketLogin = listeningSocket.accept();

但是由於某種原因,即使我指定了 ip 地址,筆記本電腦也只會在 looppack 中查找主機,而不是在專用網絡上查找主機。 這是證明:

環回流量(wireshark)

Wi-Fi 流量(wireshark)

我還在兩台筆記本電腦的防火牆中添加了一條規則,以接受在端口 50065 上傳入和傳出的 tcp。

那么有沒有一種方法可以參數化套接字以使用正確的網絡接口(使用專用網絡的接口)或者我在這里遺漏了什么?

首先,檢查您是否能夠從另一台筆記本電腦上 ping 通一台筆記本電腦。 如果是,請在下面嘗試。

Address 字段包含此偵聽套接字正在偵聽的基地址。 它包含 IP 地址和端口號。

如果您的偵聽套接字偵聽機器的所有 IP 地址,則地址的 IP 部分為 0.0.0.0。

嘗試在本地 IP 或使用“0.0.0.0”的任何地址上綁定

InetAddress addr = InetAddress.getByName("0.0.0.0");// Based on your requirement you can use local address also "192.168.1.10"

try 
{
    listeningSocket = new ServerSocket(50065, 50, addr);
    listeningSocket.setSoTimeout(1500);
} 
catch (IOException ex) {
    Logger.getLogger(ThreadLoginRequests.class.getName()).log(Level.SEVERE, null, ex);}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM