android - 单播发送 UDP 不起作用,但广播发送 UDP 可以

标签 android udp send

我有一个奇怪的问题,如果我用广播地址 (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/

相关文章:

javascript - Jquery向PHP发送数据并接收数据

android - 除了使用默认模拟器之外,是否有任何测试 android 应用程序的解决方案?

android - 使用 android init 脚本创建空文件

windows - 使用临时端口的 Boost::asio UDP 广播

android - UDP 数据包似乎被 android 4.1 阻止

java - 尝试使用javamail在java中发送电子邮件

android - 如何在 Android Marshmallow 上的 Google map 上显示当前位置?

android - Android Manifest合并失败|| list 合并失败,出现多个错误,请参阅日志

c - 从多个socket读取 : single thread with select vs. 多线程读取

android - 如何添加我的 Android 应用程序显示在发送列表中?