【问题标题】:Front-end datagram truncation UDP Android前端数据报截断UDP Android
【发布时间】:2016-03-14 17:38:29
【问题描述】:

提前感谢任何支持,

我正在尝试在本地网络上广播 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() 之前,我只会在部分响应之后得到一堆 ?

【问题讨论】:

  • 向我们展示您的代码。我敢打赌,您正在使用某种 readline 并自己切断除最后一行之外的所有内容 - 请注意您是如何在最后一个换行符之后开始的。
  • '我的 udp 接收数据包正在切断数据报的前面元素' 我敢打赌我的电影收藏你错了,你自己的代码/数据只是搞砸了。
  • @MartinJames,里面有什么好看的电影吗?
  • @SergeyA 我有几十年前的 DVD 等,还有一些“真正的卷轴”。
  • @MartinJames 感谢您的评论。我包含了通过具有相同发现字符串、广播 IP 和端口的wireshark 返回的正确数据。我已经在 iOS 上完成了这项工作。如果我的代码有误,请您提交解决方案吗?

标签: android sockets networking udp


【解决方案1】:

这确实是一个 Android Studio 错误。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多