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)
构建广播地址后,事情就像正常一样.以下代码将通过广播发送字符串数据,然后等待响应:
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实现.
归档时间: |
|
查看次数: |
8399 次 |
最近记录: |