实现客户端循环向服务器端发送消息,服务器端循环接收的功能。
客户端:
读取文本文件,并将文本文件里的每一行文字发送给客户端
public static void main(String[] args) throws Exception{ log.info("------------开始-----------"); BufferedReader bis = new BufferedReader(new FileReader("英语.txt")); DatagramSocket ss = new DatagramSocket(1001); // 客户端的端口 byte bytes[] = new byte[1024]; String s; while ((s = bis.readLine()) != null){ bytes = s.getBytes(); // 这里需要写服务器端的主机名或域名或ip地址和服务器端的端口,表示发给对应的服务器端 DatagramPacket date = new DatagramPacket(bytes,0,bytes.length, InetAddress.getByName("DESKTOP-2021TKJ"),1002); ss.send(date); } /* 用于接收服务器端在客户端发送完数据以后还在待机的状态 当服务器端接收到"quit"时会自动结束程序 */ byte bys[] = "quit".getBytes(); ss.send(new DatagramPacket(bys,0,bys.length, InetAddress.getByName("DESKTOP-2021TKJ"),1002)); log.info("数据发送成功"); ss.close(); log.info("------------结束-----------");
服务器端:
public static void main(String[] args) throws Exception{ log.info("------------开始-----------"); log.info(""); DatagramSocket ss = new DatagramSocket(1002); // 服务器端的端口 byte bytes[] = new byte[1024]; // 用来接收从客户端发送过来的数据 // 使用一个长度为bytes.length的字节数组存储从客户端发送过来的数据 DatagramPacket date = new DatagramPacket(bytes,0,bytes.length); // 接收客户端发送过来的数据 while (true){ ss.receive(date); String str = new String(bytes,0, date.getLength()); // 当客户端发送过来的数据是quit时表示发送数据完成,结束接收数据 if(str.equals("quit")){ break; } System.out.println(str); } // 将数据写到缓冲区里 // String str = new String(date.getData(),0, date.getLength()); // 将接收到的数据保存到字节数组里 log.info(""); log.info("------------结束-----------"); }
运行结果: