【发布时间】:2015-06-24 11:43:29
【问题描述】:
我是 wifi direct 的新手,我希望能够广播消息,因为我有一个时间线,当我单击发布按钮时,我希望所有连接的设备都在其时间轴上显示该消息。我能够点对点发送数据。我已经搜索过这个主题,我发现使用 UDP 是一个不错的选择,但我不知道如何在 wifi direct 中实现它。
我发现这段代码在 wifi 上使用 UDP 来获取广播地址
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);
你能帮我解释一下它是如何工作的吗 提前致谢。
【问题讨论】:
-
我有一个解决方案,您可以将数据包多播到多播组。因此,如果所有设备都加入多播 IP。然后向该组播 IP 发送一个 UDP 数据包将被所有设备接收。如果您希望我详细说明,请告诉我。
-
@ZiadHalabi 是的,请详细说明,如果您的代码提供一些示例代码会很棒
-
@Ina1994 请编辑您的问题,以便在 WiFi Direct 中提出更一般的广播问题。
标签: android wifi-direct broadcasting