Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 前端数据报截断_Android_Sockets_Networking_Udp - Fatal编程技术网

Android 前端数据报截断

Android 前端数据报截断,android,sockets,networking,udp,Android,Sockets,Networking,Udp,提前感谢大家的支持 我正在尝试在本地网络上广播UDP消息。发送特定字符串后,响应者将返回有关其位置、IP地址、状态等的元数据 我已经实现了通信,但问题在于字符串响应本身 TLDR:我的udp接收数据包正在切断数据报的前端元素 我认为这不是缓冲区大小的问题。我的buff是2048,比我希望接收的数据大得多(大约50-200个字符) 我以前使用过这个设置,第一部分没有问题(使用iOS)。wireshark(等效)控制台也证实了这一点。Wireshark和Android的输出已附加以供比较 (请注意

提前感谢大家的支持

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

我已经实现了通信,但问题在于字符串响应本身

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

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

我以前使用过这个设置,第一部分没有问题(使用iOS)。wireshark(等效)控制台也证实了这一点。Wireshark和Android的输出已附加以供比较

(请注意,在“[红色]”之前的所有内容都被省略)

内部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);
}
在异步任务中:

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只返回字符串的一部分

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