我正在发送仅包含一个字符串作为内容的UDP数据报,并且正在创建这样的数据包:

String content = ALIVE + "," + clusterName + "," + nodeName + "," + location;
byte[] data = content.getBytes();
packet = new DatagramPacket(data, data.length);


问题是,到达时它的末尾有一些奇怪的二进制数据,不能显示为字符(在Sublime Text中,它仅显示几个NUL符号)。

String data = new String(packet.getData());


我使用字符串tokenizer(,)提取了不同的信息部分,并通过在发送之前在末尾添加another来解决了这个问题。我仍然想知道,这些数据来自哪里?

最佳答案

请仔细听取建议您在两端明确指定字符编码的答案。他们的建议很棒。

但是,如果准确地接收了字符数据,但最后又添加了一些垃圾,则您的问题不太可能是由字符编码不匹配引起的。更有可能是由于接收者错误使用DatagramPacket引起的。

DatagramPacket为消息提供固定长度的缓冲区,并且getData()方法返回该缓冲区。如果它比最近收到的消息长,则尾端将包含与该消息无关的数据。收到消息后,必须使用数据包的getLength()方法来确定缓冲区中有多少字节与该消息相对应。

09-30 17:57
查看更多