• java 25


    UDP传输

    两个类:DatagramSocket与DatagramPacket(具体看API)

      A:建立发送端,接收端。

      B:建立数据包。

      C:调用Socket的发送接收方法。

      D:关闭Socket。

      E:发送端与接收端是两个独立的运行程序。

    UDP传输-发送端思路

      UDP发送数据:
        A:创建Socket发送端对象
        B:创建数据报包(把数据打包)
        C:调用Socket对象发送数据报包
        D:释放资源(底层是IO流)

    UDP传输-发送端代码

     1 public static void main(String[] args) throws IOException {
     2         // A:创建发送端Socket对象
     3         // DatagramSocket():此类表示用来发送和接收数据报包的套接字。
     4         DatagramSocket ds = new DatagramSocket();
     5         
     6         // B:创建数据,并把数据打包
     7         // DatagramPacket(byte[] buf, int length, InetAddress address, int port)
     8         // 创建数据
     9         byte[] bys = "UDP发送端".getBytes();
    10         // 数据长度
    11         int length = bys.length;
    12         
    13         // 创建IP地址对象
    14         InetAddress address = InetAddress.getByName("172.19.xx.xx");
    15         
    16         // 创建端口
    17         int port = 10010;
    18         
    19         //把数据进行打包
    20         DatagramPacket dp = new DatagramPacket(bys,length,address,port);
    21         
    22         // C:调用Socket对象的发送方法发送数据包
    23         // public void send(DatagramPacket p) 数据报包用来实现无连接包投递服务
    24         ds.send(dp);
    25         
    26         //D:释放资源
    27         ds.close();
    28     }
    29 
    30 }

    UDP传输-接收端思路

      UDP接收数据:
        A:创建Socket接收端对象
        B:创建一个数据报包来接收数据(创建容器)
        C:调用Socket对象的方法来接收数据报包
        D:解析数据包(byte转换成String),并打印在控制台
        E:释放资源

    UDP传输-接收端代码

     1 public class ReceiveDemo {
     2     public static void main(String[] args) throws IOException {
     3         // 创建接收端Socket对象
     4         // DatagramSocket(int port)
     5         DatagramSocket ds = new DatagramSocket(10010);
     6 
     7         // 创建一个数据包(接收容器)
     8         // DatagramPacket(byte[] buf, int length)
     9         byte[] bys = new byte[1000];
    10         int length = bys.length;
    11         DatagramPacket dp = new DatagramPacket(bys, length);
    12 
    13         // 调用Socket对象的接收方法接收数据
    14         // public void receive(DatagramPacket p)
    15         ds.receive(dp); // 阻塞式
    16 
    17         // 解析数据包,并显示在控制台
    18         // 获取对方的ip
    19         // public InetAddress getAddress()
    20         InetAddress address = dp.getAddress();
    21         String ip = address.getHostAddress();
    22         // public byte[] getData():获取数据缓冲区
    23         // public int getLength():获取数据的实际长度
    24         byte[] bys2 = dp.getData();
    25         int len = dp.getLength();
    26         String s = new String(bys2, 0, len);
    27         System.out.println(ip + "传递的数据是:" + s);
    28 
    29         // 释放资源
    30         ds.close();
    31     }
    32 }

    注意:因为UDP接收端是阻塞式接收,所以先启动接收端,再启动发送端。

    UDP协议发送和接收数据的图解:

  • 相关阅读:
    SQL游标应用
    八月随笔
    LINQ TO DATATABLE/DATASET基本操作之-简单查询
    Linux8.7 Linux系统日志
    Linux6.2 压缩扩展
    [转]Linux系统误删数据找回
    Linux9.2 MySQL安装
    Linux9.1 介绍
    来自朋友最近面试的阿里、腾讯、美团等P7岗位面试题
    拿到京东Java社招offer,过来分享面经
  • 原文地址:https://www.cnblogs.com/LZL-student/p/5961969.html
Copyright © 2020-2023  润新知