为了加大数据的复杂度,使用对下对象进行数据传输,字符和字节只是其中的一部分
User对象
public class User implements Serializable {
private static final long serialVersionUID = -2544486490635794436L;
//1.
private String sname;
//2.
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
}
Client客户端
public static void main(String[] args) throws Exception {
//1.创建客户端
DatagramSocket ds = new DatagramSocket();
//2.创建用于通信的数据报,使用DatagramPacket类
User user = new User();
user.setSname("DowneyJr");
//3.将对象创建编程字节流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);//将数组流传入对象流
oos.writeObject(user);//用对象流读取对象。
byte[] bytes = baos.toByteArray();//用数组流将传入的对象转化为byte数组
DatagramPacket dp = new DatagramPacket(bytes,bytes.length,InetAddress.getLocalHost(),8888);
//4.进行通信,使用send()/receive()方法
ds.send(dp);
//5.接收回发的消息
byte[] msg = new byte[1024];
DatagramPacket dp2 = new DatagramPacket(msg,msg.length);
ds.receive(dp2);
System.out.println("回发的消息是:" +
new String(msg, 0, dp2.getLength()));
//5.关闭相关的资源
ds.close();
}
Servert客户端
public static void main(String[] args) throws Exception {
//1.打开服务器
DatagramSocket ds = new DatagramSocket(8888);
byte[] datas = new byte[1024];
DatagramPacket dp = new DatagramPacket(datas,datas.length);
System.out.println("等待数据的到来...");
ds.receive(dp);
//2.打印接收到的对象
ByteArrayInputStream bais = new ByteArrayInputStream(datas);
ObjectInputStream ois = new ObjectInputStream(bais);
User result = (User) ois.readObject();
System.out.println(result);
//3.回发消息给发送方,回发的内容"I received!"
byte[] msg = "I received!".getBytes();
DatagramPacket dp2 = new DatagramPacket(msg,msg.length,dp.getAddress(),dp.getPort());
ds.send(dp2);
//4.关闭相关的资源
ds.close();
}