在进行UDP半双工通信时,服务端接受的的数据出现了客户端数据后面跟着一大串方框代码,如图所示
客户端输入正常:
服务端接受出现了方框乱码
客户端代码:
package javaweb2;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
public class UdpClient {
public static void main(String[] args) throws IOException {
//客户端发送数据给服务端
DatagramSocket ds = new DatagramSocket();
while (true) {
System.out.println("客户端:请输入发送的数据");
Scanner scanner = new Scanner(System.in);
String context = scanner.nextLine();
if ("666".equals(context)) {
break;
}
byte[] bytes = context.getBytes();
//创建socket连接
ds = new DatagramSocket();
//封装发送的数据包
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("localhost"), 8080);
//开始发送数据
ds.send(dp);
System.out.println("数据发送成功");
}
//关闭资源
ds.close();
}
}
片
服务端代码:
package javaweb2;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpServer {
public static void main(String[] args) throws IOException {
//服务器一直接受客户端发送的数据
//创建socket对象
DatagramSocket ds =new DatagramSocket(8080);
System.out.println("等待接受客户端发送的数据....");
while(true){
//创建接受者数据包
byte[] bytes=new byte[1024];
DatagramPacket dp=new DatagramPacket(bytes, bytes.length);
ds.receive(dp);
System.out.println("服务器接受到客户端发送的数据");
System.out.println(new String(dp.getData()).trim());//输出后面需要加trim()除字符串头尾的空白符,才可以去除打印的方框乱码哦
}
// ds.close();
}
}
在接受客户端发送的数据,需要在客户端打印数据时时,可以在输出字符串时在后面加上.trim()
去除字符串头尾空白符,就可以消除方框乱码。
如图显示加上.trim
后,客户端的数据能在服务端正常打印。
小伙伴们赶快去试一试吧!