zoukankan      html  css  js  c++  java
  • Java-->打包发送信息(UDP协议)

    --> 好像UDP 协议没有TCP 协议应用得那么广泛

    --> UdpSender 类定义一个发送端(快递公司)

    package com.dragon.java.udpdatagram;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.util.Scanner;
    
    public class UdpSender {
        public static void main(String[] args) throws IOException {
            Scanner scanner = new Scanner(System.in);
    
            // 创建一个DatagramSocket 快递公司
            DatagramSocket socket = new DatagramSocket(10000);
    
            // 把信息打包 new DatagramPacket(发送的字节数组, 数组中要出去多少字节, 对方的ip地址, 对方的端口号);
            // 注意:数据报的长度不能超过 64K
            byte[] data = "你好".getBytes();
            DatagramPacket dPackage = new DatagramPacket(data, data.length,
                    InetAddress.getByName("192.168.10.79"), 20000); // xx.xx.xx.255-->广播ip
    
            String line = "";
            while ((line = scanner.nextLine()) != null) {
                data = line.getBytes();
                dPackage.setData(data);
                dPackage.setLength(data.length);
    
                // 发送包裹
                socket.send(dPackage);
            }
            // socket.close();
        }
    }

    --> UDPReceiver 类定义一个接收端(收件人)

    package com.dragon.java.udpdatagram;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    /*
     * 收件人
     */
    public class UdpReceiver {
        public static void main(String[] args) throws IOException {
            // 绑定到指定的端口
            DatagramSocket socket = new DatagramSocket(20000);
    
            // 创建一个空包裹,用来接收发来的数据报的数据报包
            DatagramPacket p = new DatagramPacket(new byte[1024], 1024);
    
            while (true) {
                // 把收到的信息封装到DatagramPacket
                socket.receive(p); // 接收信息的阻塞式方法
    
                InetAddress address = p.getAddress(); // 发送人
                int port = p.getPort(); // 发送方的端口
                byte[] data = p.getData(); // 存储发送过来的数据的字节数组
                int length = p.getLength(); // 发送过来的信息的实际长度
                System.out.println(address + " " + port + " "
                        + new String(data, 0, length));
    
            }
            // socket.close();
        }
    }

    --> UDP 协议和TCP 协议相比好处是快速的(因为它无需花时间去保证数据是否损坏,无需花时间确定接受方是否存在并等待响应)、无连接的、不可靠的数据报传输协议。而TCP协议则相反,所以如何应用要根据实际需求。

  • 相关阅读:
    lua的数组下标是从1开始的
    DestroyImmediate的一些坑
    c#的IDisposable
    unity工具开发(转)
    winform控件命名规范对照表
    C#调用Exe程序示例
    System.Diagnostics.Process.Start的妙用
    C#中AppDomain.CurrentDomain.BaseDirectory及各种路径获取方法
    C# WindowsAPI
    TabPage判断重复添加Page
  • 原文地址:https://www.cnblogs.com/xmcx1995/p/5793903.html
Copyright © 2011-2022 走看看