zoukankan      html  css  js  c++  java
  • 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();
        }
    }
    
  • 相关阅读:
    集群间Session共享问题解决方案
    session原理及实现共享
    【单点登录】【两种单点登录类型:SSO/CAS、相同一级域名的SSO】
    HashMap与ConcurrentHashMap的区别
    Java的文件读写操作
    Spring之ClassPathResource加载资源文件
    3万的支付订单请求并发解决方案
    java中的队列
    互联网应用在高并发
    四种Java线程池用法解析
  • 原文地址:https://www.cnblogs.com/gbhh/p/13768062.html
Copyright © 2011-2022 走看看