UDP通信协议,模拟聊天室
需求说明
实现客户咨询问题,客服人员答复问题
分析
咨询时,客户是发送方,客服人员是接收方
答复时,客服人员是发送方,客户是接收方,实现思路和咨询时相同
当客户端输入 ending 时 会话结束。
运行时,先运行接收端,再运行发送端。
效果图:
接收端:
public class ReceiveMessTest {public static void main(String[] args) throws IOException {
// UDP多次接收 多次发送
// 接收端模拟TCP协议的服务器端System.out.println("---服务端---");// 1.创建接收端的DatagramSocket对象,DatagramSocket ds = null;DatagramPacket dp = null;Scanner sc = new Scanner(System.in);// 1.创建接收端的DatagramSocket对象,ds = new DatagramSocket(10011);//循环实现多次接收while (true){// 2.创建接收数据的数据包// 重新打包数据byte[] bytes = new byte[1024];dp = new DatagramPacket(bytes,bytes.length);// 3.接收数据ds.receive(dp);// 4.解析数据包byte[] data = dp.getData();// 打印数据String msg = new String(data);System.out.println("客户端:"+msg);// -----------------------------------------------------// 发送System.out.print("服务端请输入:");String s = sc.nextLine();// 获得上个数据包发送的地址// InetAddress address = dp.getAddress();SocketAddress address = dp.getSocketAddress();// 打包数据dp = new DatagramPacket(s.getBytes(),s.getBytes().length,address);// 发送数据ds.send(dp);}}
}
发送端:
public class SendMessTest {public static void main(String[] args) throws IOException {// UDP多次发送 多次接收
//发送端模拟TCP协议的客户端System.out.println("----客户端----");// 1.创建发端的对象DatagramSocket ds = null;DatagramPacket dp = null;// 2.打包数据// 2.1数据来自键盘录入Scanner sc = new Scanner(System.in);while (true){// 1.创建发端的对象ds = new DatagramSocket();System.out.print("请输入要发送的数据:");String s = sc.nextLine();// 结束发送的条件if ("ending".equals(s)){break;}// 2.2将发送的内容变成字节数组byte[] bytes = s.getBytes();// 2.3向127.0.0.1的设备发送InetAddress address = InetAddress.getByName("127.0.0.1");// 2.4接收设备的端口号int port = 10011;// 2.5 打包数据dp = new DatagramPacket(bytes,bytes.length,address,port);// 3.发送数据ds.send(dp);// ----------------------------------------// 4.接收数据// 创建一个新的数组,用来接收数据byte[] bytes1 = new byte[1024];// 创建数据包dp = new DatagramPacket(bytes1,bytes1.length);// 接收数据ds.receive(dp);// 解析数据byte[] data = dp.getData();String s1 = new String(data);System.out.println("服务端:"+s1);}// 4.释放资源ds.close();}
}