前端数据报截断 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 仅返回字符串的一部分。
在此先感谢您的支持,
我正在尝试在本地网络上广播 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 仅返回字符串的一部分。