【问题标题】:android-connect to a specific pc over wifiandroid-通过wifi连接到特定的电脑
【发布时间】:2023-04-09 02:58:01
【问题描述】:

我的 PC 中有一个 TCP 服务器,我的安卓手机中有一个客户端。我希望手机每次都在同一个网络上时连接到计算机。 如何将所有连接的设备扫描到手机的同一个wifi网络并每次选择特定的PC? (我注意到我的 PC 的 IP 正在改变,所以我不能将地址用作常量) 谢谢!

【问题讨论】:

    标签: android sockets tcp wifi


    【解决方案1】:

    如果您已经编写了 PC 应用程序并且可以对其进行更新,那么您可以向其添加一个 UDP 套接字,该套接字侦听与 TCP 套接字相同的 NIC。然后,Android 客户端可以使用 WiFi 网络的子网广播 IP 将 UDP 数据包发送到 PC 的 UDP 端口。数据包将被发送到连接到子网的每个设备上的同一端口。如果 PC 应用程序收到数据包,它可以直接向发送者的 IP 发送回复。如果 Android 客户端收到回复,它将因此知道 PC 的 IP 并可以连接到它的 TCP 套接字。

    要获取WiFi的子网广播IP,可以这样做:

    Android Broadcast Address

    private InetAddress getBroadcastAddress() throws IOException {
        WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        DhcpInfo dhcp = wifi.getDhcpInfo();
        // handle null somehow
    
        int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
        byte[] quads = new byte[4];
        for (int k = 0; k < 4; k++)
          quads[k] = (byte) (broadcast >> (k * 8));
        return InetAddress.getByAddress(quads);
    }
    

    另一方面,如果您尚未编写 PC 应用程序和/或无法更新它,那么您将不得不:

    • 制作一个单独的应用程序与 TCP 应用程序一起运行以处理 UDP 数据包。

    • 1234563 987654325@),尝试连接每个 IP 上的 TCP 端口,直到最终成功。这种方法很慢,尤其是在子网有很多可用 IP 的情况下,但它会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      相关资源
      最近更新 更多