前端数据报截断 UDP Android

Front-end datagram truncation UDP Android

在此先感谢您的支持,

我正在尝试在本地网络上广播 UDP 消息。发送特定字符串后,响应者会发回有关其位置、IP 地址、状态等的元数据。

我已经进行了通信,但问题出在字符串响应本身。

TLDR: 我的 udp 接收数据包正在切断数据报的 front 元素。

我认为这不是缓冲区大小问题。我的 buff 是 2048,比我希望接收的数据大得多(大约 50-200 个字符)。

我以前使用过这个设置,第一部分没问题(iOS)。 wireshark(等效)控制台也可以确认。附上 Wireshark 和 Android 输出以供比较。

Proper data coming in via packet app

Front-truncated packet in logcat(注意“[Red]”之前的所有内容都被省略了)

在 onCreate 内部:

try{
    socket = new DatagramSocket();
    socket.setBroadcast(true);
    socket.setSoTimeout(3000);
    broadcastPacket = new DatagramPacket(
                broadcastString.getBytes(),
                broadcastString.length(),
                getBroadcastAddress(),
                30303);
}catch (IOException e) {
    Log.e("MYAPP", "socket error", e);
}

在 AsyncTask 中:

try {
    while(true) {
        byte[] buffer = new byte[2048];
        DatagramPacket receivePacket = new DatagramPacket(buffer, buffer.length);
        socket.receive(receivePacket);
        String receiveString = new String(receivePacket.getData(), 0, receivePacket.getLength() );
        Log.d("a", "Received response " + receiveString );
        Log.d("a", "From host " + receivePacket.getAddress() );
        Log.d("a", "With offset " + receivePacket.getOffset() );
    }
}catch (java.io.IOException e) {
    Log.d("a", "Receive timed out");
}

请注意,在使用 receivePacket.getLength() 之前,我只会得到一堆 ? 的 部分响应

之后

这确实是一个 Android Studio 错误。

String[] deviceElements = receiveString.split("\r\n");
Log.d("a", deviceElements[0]);

返回了我正在寻找的数据;最初打印完整的 receiveString 仅返回字符串的一部分。