• UDP编程


    概述

    UDP(User Datagram Protocol)用户数据报协议

    为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。

    模型图片

    img

    使用方法

    客户端

    1. 建立 DatagramSocket 连接
    2. 建立 DatagramPacket 数据包
    3. 发送数据包
    4. 关闭连接

    服务端

    1. 设置端口
    2. 建立需要被接收数据包
    3. 接收数据包
    4. 关闭连接

    常用api

    优化

    。。。

    实例

    客户端

    /**
     * @function UDP发送消息,无需接收
     */
    public class UdpClientDemo01 {
        public static void main(String[] args) throws Exception {
    //        设置ip、端口
            InetAddress ip = InetAddress.getByName("localhost");
            int port = 9090;
    //        发送的消息
            String msg = "你好 钢镚核恒!";
    //        建立socket连接
            DatagramSocket datagramSocket = new DatagramSocket();
    //        建立数据包
            DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(), 0,msg.getBytes().length, ip,port);
    //        发送数据包
            datagramSocket.send(datagramPacket);
    //        关闭连接
            datagramSocket.close();
        }
    }
    

    服务端

    public class UdpServerDemo01 {
        public static void main(String[] args) throws IOException {
    //        设置端口
            DatagramSocket datagramSocket = new DatagramSocket(9090);
    //        建立缓冲区
            byte[] buffer = new byte[1024];
    //        建立需要被接收数据包
            DatagramPacket datagramPacket = new DatagramPacket(buffer, 0, buffer.length);
    //        接收数据包、阻塞
            datagramSocket.receive(datagramPacket);
    //        输出ip、消息
            System.out.println(datagramPacket.getAddress().getHostAddress());
            System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength()));
    //        关闭连接
            datagramSocket.close();
        }
    }
    

    实现简单的聊天

    客户端

    /**
     * 实现简单的聊天,一端发送,一端接收
     */
    public class UdpClient {
        public static void main(String[] args) throws IOException {
            DatagramSocket datagramSocket = new DatagramSocket(9090);
            while (true){
                //接收控制台数据
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    //            读取一行
                String data = bufferedReader.readLine();
    //            缓冲区
                byte[] datas = data.getBytes();
    //            建立数据包
                DatagramPacket datagramPacket = new DatagramPacket(datas, 0,datas.length, new InetSocketAddress("localhost",9091));
                datagramSocket.send(datagramPacket);
                if(data.equals("bye")){
                    break;
                }
            }
            datagramSocket.close();
        }
    }
    

    服务端

    public class UdpServer {
        public static void main(String[] args) throws IOException {
            DatagramSocket datagramSocket = new DatagramSocket(9091);
            while (true){
    //            准备接收收据包
                byte[] buffer = new byte[1024];
                DatagramPacket datagramPacket = new DatagramPacket(buffer, 0, buffer.length);
                datagramSocket.receive(datagramPacket);
    //            输出数据
                byte[] data = datagramPacket.getData();
                String receiveData = new String(data, 0, data.length);
                System.out.println(receiveData);
                if(receiveData.equals("bye")){
                    break;
                }
            }
            datagramSocket.close();
        }
    }
    
  • 相关阅读:
    βVAE学习
    条件GAN学习
    epoll的事件的状态
    RST报文产生的情况
    SIGPIPE信号产生原因
    methods事件
    for列表渲染
    if条件渲染
    data数据
    vue的简单上手
  • 原文地址:https://www.cnblogs.com/gbhh/p/13768062.html
Copyright © 2020-2023  润新知