要求:
使用UDP协议实现一个聊天程序
代码:
发送端:
package UDP聊天程序;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .InetAddress;import .SocketException;import .UnknownHostException;import java.util.Scanner;public class Send {public static void main(String[] args) {System.out.println("发送端已启动!");DatagramSocket socket=null;Scanner scanner=new Scanner(System.in);try {//1.创建Datagramsocket对象socket=new DatagramSocket();while(true){//2.要发送的数据String string=scanner.nextLine();//3.创建数据包DatagramPacket packet=new DatagramPacket(string.getBytes(), string.getBytes().length,InetAddress.getLocalHost(),6666);//4.发送数据socket.send(packet);//若我方发送了bye,马上结束聊天if(string.equals("bye")){System.out.println("bye,聊天结束!");break;}//5.接收--接收端回复的数据byte[] bs=new byte[1024];DatagramPacket packet2=new DatagramPacket(bs, bs.length);socket.receive(packet2);String string2=new String(packet2.getData(), 0, packet2.getLength());//若对方发送了bye,马上结束聊天if(string2.equals("bye")){System.out.println("bye,聊天结束!");break;}System.out.println("接收端回复:"+string2);}} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if(socket!=null){socket.close();}}}}
接收端:
package UDP聊天程序;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .SocketException;import java.util.Scanner;public class Receive {public static void main(String[] args) {System.out.println("接收端已启动!");DatagramSocket socket=null;Scanner scanner=new Scanner(System.in);try {//1.创建Datagrams对象socket=new DatagramSocket(6666);while(true){//2.创建数据包packetbyte[] buf=new byte[1024];DatagramPacket packet=new DatagramPacket(buf, buf.length);//3.接收数据socket.receive(packet);String string=new String(packet.getData(), 0, packet.getLength());//若对方发送了bye,马上结束聊天if(string.equals("bye")){System.out.println("bye,聊天结束!");break;}System.out.println("发送端说:"+string);//4.给发送端回复String string2=scanner.nextLine();DatagramPacket packet2=new DatagramPacket(string2.getBytes(), string2.getBytes().length,packet.getAddress(),packet.getPort());socket.send(packet2);//若我方发送了bye,马上结束聊天if(string2.equals("bye")){System.out.println("bye,聊天结束!");break;}}} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if(socket!=null){socket.close();}}}}
运行结果:
接收端聊天列表:
发送端聊天列表: