Android - 在网络中查找服务器

标签 android networking network-programming

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

最佳答案

您可能想查看 UDP 广播,您的服务器会在其中宣布自己,而手机会监听广播。


There is an example来自 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);
}

发送和接收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);

您还可以查看 Bonjour/zeroconf,并且有一个 Java implementation这应该适用于 Android。

关于Android - 在网络中查找服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4464207/

相关文章:

android - listview在android中的每个列表项中都有viewpager

Java网络-如何永久禁止IP地址?

java - 在 Java 中建立多客户端/服务器 TCP 连接

在没有 root 权限的情况下更改 Linux 中的网络设置

android - 从 ListView 读取 EditText 内容

android - 在 android studio 中添加库时出现问题 [未找到名称为 'default' 的配置。]

networking - 在握手过程的第三步用 RST 代替 ACK

c - 如何修复找不到 `getaddrinfo` 定义的问题?

sockets - 使用具有 "select"功能的非阻塞套接字有什么好处?

android - 在 onItemClickListener 中,isItemChecked 总是返回与预期相反的结果?