【问题标题】:Unicast send UDP doesn't work but Broadcast send UDP does单播发送 UDP 不起作用,但广播发送 UDP 起作用
【发布时间】:2012-11-09 20:42:07
【问题描述】:

我有一个奇怪的问题,如果我使用广播地址 (192.168.1.255) 发送 UDP 数据包,我可以发送和接收 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);
        }
    }

我的清单文件具有以下权限:

<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" />

鉴于广播有效,我想不出我做错了什么。请问有什么想法吗?

【问题讨论】:

    标签: android udp send


    【解决方案1】:

    您是否尝试过其他端口? 可能多次循环这个方法,UDP 不能保证 100% 的数据包传递

    您是否在代码中使用socket.setBroadcast(true) somwhere 来发送广播消息?

    【讨论】:

    • 稍后回来,我已经意识到@MP23 所说的含义:我需要在发送单播消息之前放入 socket.setBroadcast(false)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2019-06-17
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    相关资源
    最近更新 更多