通过Socket实现UDP(用户数据报)编程

来源:互联网 发布:js中的length 编辑:程序博客网 时间:2024/05/22 13:41
  1. 服务器端
    (1)步骤
    ①创建DatagramSocket,指定端口号
    ②创建DatagramPacket
    ③接收客户端发送的数据信息
    ④读取数据
try {    /**     * 服务器接收客户端数据     */    //1.创建服务器端DatagramSocket,指定端口    DatagramSocket socket=new DatagramSocket(1028);    //2.创建数据报,用于接收客户端发送的数据    byte[] data=new byte[1024];//创建字节数组,指定接收的数据包的大小    DatagramPacket packet=new DatagramPacket(data, data.length);    System.out.println("***服务器端已启动,等待客户端***");    //3.接收客户端发送的数据    socket.receive(packet);//此方法在接收到数据报之前会一直阻塞    //4.读取数据    String info=new String(data);    System.out.println("我是服务器,客户端说:"+info);    /**     * 服务器对客户端数据进行响应     */    //1.定义客户端的IP,端口号,数据    InetAddress address = packet.getAddress();    int port=packet.getPort();    byte[] data2="欢迎您".getBytes();    //2.创建数据报,包含响应的数据信息    DatagramPacket packet2=new DatagramPacket(data2, 0,data2.length, address, port);    //3.响应客户端    socket.send(packet2);    //4.关闭资源    socket.close();} catch (SocketException e) {    e.printStackTrace();} catch (IOException e) {    e.printStackTrace();}

2.客户端
(1)步骤
①定义发送信息
②创建DatagramPacket,包含将要发送的信息
③创建DatagramSocket
④发送数据

try {    /**     * 客户端向服务器发送数据     */    //1.定义服务器的地址,端口号,数据    InetAddress address = InetAddress.getByName("localhost");    int port=1028;    //2.创建数据报,包含要发送的数据信息    String info="用户名:admin,密码:123456";    byte[] bytes=info.getBytes();    DatagramPacket packet=new DatagramPacket(bytes, 0, bytes.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.读取数据    System.out.println("我是客户端,服务器说:"+new String(data2));    //4.关闭资源    socket.close();} catch (UnknownHostException e) {    e.printStackTrace();} catch (SocketException e) {    e.printStackTrace();} catch (IOException e) {    e.printStackTrace();}   

3.多客户端
①服务器端

void UDPServer(){    try {        /**         * 服务器接收客户端数据         */        //1.创建服务器端DatagramSocket,指定端口        DatagramSocket socket=new DatagramSocket(1028);        System.out.println("***服务器端已启动,等待客户端***");        while(true){            //2.创建数据包,用于接收客户端发送的数据            byte[] data=new byte[1024];//创建字节数组,指定接收的数据包的大小            DatagramPacket packet=new DatagramPacket(data, data.length);            //3.接收客户端发送的数据            socket.receive(packet);            UDPServerThread serverThread=new UDPServerThread(socket,packet);            serverThread.start();        }    }catch (Exception e) {        e.printStackTrace();    }}

②客户端

void UDPClient(){    try {        /**         * 客户端向服务器发送数据         */        //1.定义服务器的地址,端口号,数据        InetAddress address = InetAddress.getByName("localhost");        int port=1028;        //2.创建数据报,包含要发送的数据信息        String info="用户名:admin,密码:123456";        byte[] bytes=info.getBytes();        DatagramPacket packet=new DatagramPacket(bytes, 0, bytes.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.读取数据        System.out.println("我是客户端,服务器说:"+new String(data2));        //4.关闭资源        socket.close();    } catch (UnknownHostException e) {        e.printStackTrace();    } catch (SocketException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }   }

③线程监听

public class UDPServerThread extends Thread{    DatagramSocket socket;    DatagramPacket packet;    public UDPServerThread(DatagramSocket socket,DatagramPacket packet) {        this.socket=socket;        this.packet=packet;    }    @Override    public void run() {        try {            byte[] data=packet.getData();            //4.读取数据            String info=new String(data);            System.out.println("我是服务器,客户端说:"+info);            /**             * 服务器对客户端数据进行响应             */            //1.定义客户端的IP,端口号,数据            InetAddress address = packet.getAddress();            int port=packet.getPort();            byte[] data2="欢迎您".getBytes();            //2.创建数据报,包含响应的数据信息            DatagramPacket packet2=new DatagramPacket(data2, 0,data2.length, address, port);            //3.响应客户端            socket.send(packet2);        } catch (IOException e) {            e.printStackTrace();        }       }}
0 0
原创粉丝点击