首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 與 PC Socket 通訊:如何正確獲取 PC 端真實本地 IP

     編輯:程式設計綜合問答

在 Android 與 PC 建立 Socket 連線時,PC 作為 Server、手機作為 Client,核心難點在於手機如何獲取 PC 的真實區域網 IP。許多開發者只能拿到虛擬網卡(如「WiFi 精靈」建立的熱點)IP,導致連線失敗。本文提供完整解決方案。

問題本質

  • PC 可能擁有多張網卡:乙太網卡、Wi-Fi、虛擬網卡(Hyper-V、VMware、手機熱點軟體)
  • InetAddress.getLocalHost() 或遍歷 NetworkInterface 常返回第一張非回環介面,不一定是目標區域網卡
  • 手機連接的熱點若非 PC 實體網卡,雙方不在同一網段,無法直連

解決方案:指定綁定介面 + 靜態 IP

步驟一:PC 端固定區域網 IP

  1. 進入「網路和共用中心」→「變更介面卡設定」
  2. 右鍵實體網卡(乙太網路或 Wi-Fi)→「內容」→「Internet 協定版本 4 (TCP/IPv4)」
  3. 選「使用下列 IP 位址」,設定:
    IP:192.168.1.100(視路由器網段而定)
    子網路遮罩:255.255.255.0
    預設閘道:路由器 IP(如 192.168.1.1)
    DNS:8.8.8.8 / 114.114.114.114

步驟二:手機端連接同一網段

  • 手機連接同一路由器 Wi-Fi(而非 PC 開的熱點)
  • 或手機開熱點,PC 連接手機熱點(此時 PC 為 Client,手機為 Server,邏輯反轉)

步驟三:Server 代碼綁定具體 IP

// PC Server 端
ServerSocket server = new ServerSocket();
server.bind(new InetSocketAddress("192.168.1.100", 5000)); // 綁定固定 IP
Socket client = server.accept();
// 處理通訊...

步驟四:Client 直接連線固定 IP

// Android Client 端
Socket socket = new Socket("192.168.1.100", 5000);
// 通訊邏輯...

進階:程式碼自動偵測真實區域網 IP

若不想手動固定 IP,PC 端可用以下代碼自動獲取非虛擬、非回環、已連線的 IPv4:

public static String getRealLanIp() {
    try {
        Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
        while (interfaces.hasMoreElements()) {
            NetworkInterface ni = interfaces.nextElement();
            // 過濾虛擬網卡、回環、未啟用
            if (ni.isLoopback() || ni.isVirtual() || !ni.isUp()) continue;
            Enumeration<InetAddress> addresses = ni.getInetAddresses();
            while (addresses.hasMoreElements()) {
                InetAddress addr = addresses.nextElement();
                if (addr instanceof Inet4Address && !addr.isLoopbackAddress()) {
                    String ip = addr.getHostAddress();
                    // 進一步過濾 169.254.x.x (APIPA)、10.0.2.15 (模擬器) 等
                    if (!ip.startsWith("169.254") && !ip.startsWith("10.0.2")) {
                        return ip;
                    }
                }
            }
        }
    } catch (SocketException e) {
        e.printStackTrace();
    }
    return null;
}

常見坑點提醒

  • 防火牆:Windows 防火牆需開放 5000 埠(或自訂埠)的輸入規則
  • 雙頻路由器:確保手機與 PC 連同一頻段(2.4G/5G)且關閉 AP 隔離
  • 虛擬機衝突:VMware/VirtualBox 的虛擬網卡常干擾 IP 判斷,建議在代碼中過濾名稱含 vmnet、vboxnet 的介面

總結

「獲取 PC 真實 IP」的核心不是偵測技巧,而是網路拓撲設計:讓雙方處於同一物理/邏輯網段,PC 固定 IP、Server 綁定該 IP、Client 直連。避免使用「WiFi 精靈」類虛擬熱點作為通訊媒介,穩定性與速度皆有保障。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved