Android - 在网络中查找服务器 [英] Android - find a server in the network

查看:30
本文介绍了Android - 在网络中查找服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am currently writing a client-server application and I ask myself if there is a better way to find a server in the local network then going trough all the available IP addresses and see if the correct answer is supplied?

推荐答案

您可能想要研究 UDP 广播,您的服务器在其中宣布自己,而电话则侦听广播.

You might want to look into UDP broadcasts, where your server announces itself and the phone listens for the broadcasts.

有一个来自 Boxee 远程项目的示例,引用如下.

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

You need to access the wifi manager to get the DHCP info and construct a broadcast address from that:

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广播数据包

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

Sending and Receiving UDP Broadcast Packets

Having constructed the broadcast address, things work as normal. The following code would send the string data over broadcast and then wait for a response:

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 实现 应该适用于 Android.


You could also look into Bonjour/zeroconf, and there is a Java implementation that should work on Android.

这篇关于Android - 在网络中查找服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆