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();
        }
    }
    
  • 相关阅读:
    python中的quopri模块
    使用ant来压缩js代码,这个很有用
    js 压缩工具 google closure compiler
    web中,canvas render 跟 webgl render 的区别
    越南unicode范围
    复杂度分析 数据结构
    svn bat批处理
    游戏 有限状态机参考:
    python list排序
    游戏 AOI相关
  • 原文地址:https://www.cnblogs.com/gbhh/p/13768062.html
Copyright © 2011-2022 走看看