简体   繁体   English

单播发送 UDP 不起作用,但广播发送 UDP 起作用

[英]Unicast send UDP doesn't work but Broadcast send UDP does

I have a, to my mind odd, problem whereby I can send and receive UDP packets if I send them with a broadcast address (192.168.1.255).我有一个奇怪的问题,如果我用广播地址 (192.168.1.255) 发送它们,我可以发送和接收 UDP 数据包。 If I send with a unicast address (192.168.1.83) the packet does not get transmitted (I've checked with Wireshark).如果我使用单播地址 (192.168.1.83) 发送,则不会传输数据包(我已使用 Wireshark 检查过)。

The send function is:发送函数为:

    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);
        }
    }

My manefest file has the following permissions:我的 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" />

Given that broadcast works I can't think what I am doing wrong.鉴于广播有效,我想不出我做错了什么。 Any ideas please?请问有什么想法吗?

Have you tried on another ports?您是否尝试过其他端口? Maybe loop this method several times, UDP doesn't guarantee 100% delivery of packets可能多次循环这个方法,UDP 不保证数据包的 100% 交付

Are you using socket.setBroadcast(true) somwhere in your code, to send broadcast messages?您是否在代码中某处使用socket.setBroadcast(true)来发送广播消息?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM