我有一个奇怪的问题,如果我用广播地址 (192.168.1.255) 发送 UDP 数据包,我可以发送和接收它们。如果我使用单播地址 (192.168.1.83) 发送数据包,则数据包不会被传输(我已经使用 Wireshark 进行了检查)。
发送函数是:
private void sendPacket(String data) {
try {
if (mSocket.isClosed()) {
Log.e(TAG, "Socket is closed: " + data);
return;
}
Log.d(TAG, "Send: " + data + " - " + myLocalIP.toString()+ " - " + myBcastIP.toString());
DatagramPacket packet = new DatagramPacket(data.getBytes(),
data.length(), myLocalIP, BCAST_PORT);
mSocket.send(packet);
} catch (Exception e) {
Log.e(TAG, "Exception during write", e);
}
}
我的 manefest 文件具有以下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
鉴于广播有效,我想不出我做错了什么。有什么想法吗?
最佳答案
您是否尝试过其他端口? 也许循环这个方法几次,UDP 不保证 100% 的数据包传递
您是否在代码中的某处使用 socket.setBroadcast(true)
来发送广播消息?
关于android - 单播发送 UDP 不起作用,但广播发送 UDP 可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13495945/