JAVA——UDP简易聊天室

114 阅读1分钟

需求

多个客户端向数据发送数据包
在服务端打印数据包

Server

public class UDPserver{
    public static void main(String[] args){
        //1,创建UDP服务端的Socket对象,并监听1025端口
        DatagramSocket server= new DatagramSocket(1025);
        //2,一直去接收来自客户端的数据包
        while(true){
            //指定一个大小为一KB的数据包
            byte[] buf=new byte[1024];
            DatagramPacket packet =new  DatagramPacket(buf,buf.length);
  //3,UDP服务器接收一个数据包然后将数据包封装成一个DatagramPacket对象packet
            server.receive(packet);//receive接一个数据包
            //4,从packet中读取接收的数据
            //packet.getData()//获取数据包中的字节数据
            //packet.getOffset()//获取数据包中的有效数据量的开始偏移位置
            //packet.getLength()//获取数据包中的中长度
            
            String info = new String(packet.getData(),packet.getOffset(),packet.getLength());
            System.out.println(info);              
        }
    }
}

Client

public class Client01{
    public static void main(String[] args){
        //1,创建一个UDP客户端,不需要绑定端口
        DatagramSocket client=new  DatagramSocket();//没有绑定端口,意味着socket属于客户端
     //2,设置等待时间,如果在该时间内没有接收到任何服务端来的数据,则客户端断联
        client.setSoTimeout(1000);
        InetAddress address=InetAddress.getByName("172.162.80.51");
    //    InetAddress address=InetAddress.getByAddress();//获取主机、ip对象
   //   InetAddress address=InetAddress.getLocalHost();//获取本地的IP地址对象
        //3,客户端去连接服务端:将服务端的数据传进client里
        client.connect(address,1025);
        Scanner scanner=new Scanner (System.in);
        while(true){
             System.out.println("<<<");  
             String info=scanner.nextLine();
             if(info.equals("886")){
                 break;
             }
             //4,向服务端发送消息,是一个数据包DatagramPacket 对象
             byte[] buf=info.getBytes();
             DatagramPacket packet= new  DatagramPacket(buf,buf.length);
            client.send(packet);
        }
        client.disconnect();
    }
}