手记

Java Socket应用-基于UDP多用户通信

  1. UDP服务器线程处理类
    
    public class UDPServerThread extends Thread {
    DatagramSocket socket=null;
    DatagramPacket packet=null;
    byte[] data=null;
    public UDPServerThread(DatagramSocket socket,DatagramPacket packet,byte[] data){
        this.socket=socket;
        this.packet=packet;
        this.data=data;
    }
        public void run(){
            /*
             * 接收客户端数据
             */ 
                String info=new String(data, 0, packet.getLength());
                if(info!=null){
                System.out.println("我是服务器,客户端说:"+info);
                }               
                /*
                 * 向客户端响应数据
                 * */  
                //1.定义客户端的地址、端口号、数据
                InetAddress address=packet.getAddress();
                int port=packet.getPort();
                byte[] data2="欢迎你!".getBytes();
                //2.创建数据报,包含响应的数据信息
                DatagramPacket packet2=new DatagramPacket(data2, data2.length, address, port);
                //3.响应客户端
                try {
                    socket.send(packet2);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }

}

2.UDP服务器类

public class UDPSever1 {
public static void main(String[] args) throws IOException {
DatagramSocket socket=new DatagramSocket(8800);
System.out.println("服务器即将启动,等待客户端的连接");
byte[] data=new byte[1024];//创建字节数组,指定接收的数据包的大小
int count =0;
while(true){
DatagramPacket packet=new DatagramPacket(data, data.length);
socket.receive(packet);
//此方法在接收到数据报之前会一直阻塞
//4.读取数据
count++;
System.out.println("客户端数量"+count);
UDPServerThread UDPThread=new UDPServerThread(socket,packet,data);
UDPThread.start();
}
}
}

3.客户端类

public class UDPClient {

public static void main(String[] args) throws IOException {     
    /*
     * 向服务器端发送数据
     * */   
    //1.定义服务器的地址、端口号、数据
    InetAddress address=InetAddress.getByName("localhost");
    int port=8800;
    byte[] data="用户名:admin;密码:123".getBytes();
    //2/创建数据报,包含发送的数据信息
    DatagramPacket packet=new DatagramPacket(data, data.length, address, port);
    //3.创建DatagramSocket对象
    DatagramSocket socket=new DatagramSocket();
    //4.向服务器发送数据报
    socket.send(packet);
/*
 * 接收服务器端响应的数据
 * */
    //1.创建数据报,用于接收服务器端响应的数据
    byte[] data2=new byte[1024];//创建字节数组,指定接收的数据包的大小
    DatagramPacket packet2=new DatagramPacket(data2, data2.length);
    //2.接收服务器响应数据
    socket.receive(packet2);
    //3.读取数据
    String reply=new String(data2, 0, packet2.getLength());
    System.out.println("我是客户端,服务器说:"+reply);
    //4.关闭资源*/
    socket.close();
}

}

1人推荐
随时随地看视频
慕课网APP