android-通过wifi连接到特定的电脑

时间:2015-06-19 11:44:30

标签: android sockets tcp wifi

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

1 个答案:

答案 0 :(得分:0)

如果您已经编写了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数据包。

  • 如果所有其他方法都失败了,请让Android客户端简单地遍历子网上的每个可能的IP地址(您可以根据ipAddressnetmask轻松计算起始和结束IP地址DhcpInfo)报告的值,尝试连接到每个IP上的TCP端口,直到最终成功。这种方法很慢,特别是如果子网有很多可用的IP,但它可以工作。