Android - 在网络中查找服务器

Mar*_*ark 13 networking android network-programming

我目前正在编写一个客户端 - 服务器应用程序,我问自己是否有更好的方法在本地网络中找到服务器,然后通过所有可用的IP地址,看看是否提供了正确的答案?

Jes*_*ess 22

您可能希望查看UDP广播,其中您的服务器宣布自己并且电话侦听广播.


Boxee远程项目有一个例子,引用如下.

获取广播地址

您需要访问wifi管理器以获取DHCP信息并从中构建广播地址:

InetAddress getBroadcastAddress() throws IOException {
    WifiManager wifi = mContext.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) & 0xFF);
    return InetAddress.getByAddress(quads);
}
Run Code Online (Sandbox Code Playgroud)

发送和接收UDP广播包

构建广播地址后,事情就像正常一样.以下代码将通过广播发送字符串数据,然后等待响应:

DatagramSocket socket = new DatagramSocket(PORT);
socket.setBroadcast(true);
DatagramPacket packet = new DatagramPacket(data.getBytes(), data.length(),
    getBroadcastAddress(), DISCOVERY_PORT);
socket.send(packet);

byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
Run Code Online (Sandbox Code Playgroud)

您还可以查看Bonjour/zeroconf,并且有一个适用于Android 的Java实现.