在使用socket发送udp包传输文本时,由于包中的char型数组是定长的,且其长度大于消息长度,所以其中必有很多空元素。当接收端接收到udp包时进行转码,空元素就会被转码成方块形状的乱码。
解决办法:
每条消息发送完毕后添加“#”作为记号,接收后截取#前的字符显示。
public synchronized void sendUDP(String s) {
newMessage = s+"#";
new Thread(new Runnable() {
public void run() {
try {
DatagramSocket socket = new DatagramSocket();
byte[] buf = newMessage.getBytes();
//vivo:192.168.0.10 xiaomi:"192.168.0.9"
DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName(IP), 12345);//InetAddress.getLocalHost(), 12345);
socket.send(packet);
} catch (IOException e1) {
//TODO Auto-generated catch block
e1.printStackTrace();
}
}
}).start();
}