Android 前端数据报截断
提前感谢大家的支持 我正在尝试在本地网络上广播UDP消息。发送特定字符串后,响应者将返回有关其位置、IP地址、状态等的元数据 我已经实现了通信,但问题在于字符串响应本身 TLDR:我的udp接收数据包正在切断数据报的前端元素 我认为这不是缓冲区大小的问题。我的buff是2048,比我希望接收的数据大得多(大约50-200个字符) 我以前使用过这个设置,第一部分没有问题(使用iOS)。wireshark(等效)控制台也证实了这一点。Wireshark和Android的输出已附加以供比较 (请注意,在“[红色]”之前的所有内容都被省略) 内部onCreate:Android 前端数据报截断,android,sockets,networking,udp,Android,Sockets,Networking,Udp,提前感谢大家的支持 我正在尝试在本地网络上广播UDP消息。发送特定字符串后,响应者将返回有关其位置、IP地址、状态等的元数据 我已经实现了通信,但问题在于字符串响应本身 TLDR:我的udp接收数据包正在切断数据报的前端元素 我认为这不是缓冲区大小的问题。我的buff是2048,比我希望接收的数据大得多(大约50-200个字符) 我以前使用过这个设置,第一部分没有问题(使用iOS)。wireshark(等效)控制台也证实了这一点。Wireshark和Android的输出已附加以供比较 (请注意
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上完成了这项工作。如果我的代码是错误的,请您提交解决方案好吗?