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();
        }
    }
    
  • 相关阅读:
    深入JavaScript之获取cookie以及删除cookie
    js 首次进入弹窗
    jquery 点击加载更多
    express 设置允许跨域访问
    微信小程序之全局储存
    jquery 在页面上根据ID定位(jQuery锚点跳转及相关操作)
    我也想聊聊 OAuth 2.0 —— 基本概念
    一行代码,发送邮件
    【Git使用】强制推送代码到多个远程仓库
    一秒钟生成自己的iOS客户端
  • 原文地址:https://www.cnblogs.com/gbhh/p/13768062.html
Copyright © 2011-2022 走看看