• 00106_UDP通信


    1、DatagramPacket

      (1)JDK中提供了一个DatagramPacket类,该类的实例对象就相当于一个集装箱,用于封装UDP通信中发送或者接收的数据;

      (2)在创建发送端和接收端的DatagramPacket对象时,使用的构造方法有所不同,接收端的构造方法只需要接收一个字节数组来存放接收到的数据,而发送端的构造方法不但要接收存放了发送数据的字节数组,还需要指定发送端IP地址和端口号;

    2、DatagramSocket

      (1)DatagramSocket类的作用就类似于码头,使用这个类的实例对象就可以发送和接收DatagramPacket数据包;

    3、UDP网络程序

      (1)要实现UDP通信需要创建一个发送端程序和一个接收端程序,很明显,在通信时只有接收端程序先运行,才能避免因发送端发送的数据无法接收,而造成数据丢失。因此,首先需要来完成接收端程序的编写;

      (2)UDP完成数据的接收

     1 import java.io.IOException;
     2 import java.net.DatagramPacket;
     3 import java.net.DatagramSocket;
     4 import java.net.InetAddress;
     5 
     6 /*
     7  * UDP接收端
     8  * 
     9  * 1,创建DatagramSocket对象
    10  * 2,创建DatagramPacket对象
    11  * 3,接收数据存储到DatagramPacket对象中
    12  * 4,获取DatagramPacket对象的内容
    13  * 5,释放流资源
    14  */
    15 public class UDPReceive {
    16     public static void main(String[] args) throws IOException {
    17         // 1,创建DatagramSocket对象,并指定端口号
    18         DatagramSocket receiveSocket = new DatagramSocket(12306);
    19         // 2,创建DatagramPacket对象, 创建一个空的仓库
    20         byte[] buffer = new byte[1024];
    21         DatagramPacket dp = new DatagramPacket(buffer, 1024);
    22         // 3,接收数据存储到DatagramPacket对象中
    23         receiveSocket.receive(dp);
    24         // 4,获取DatagramPacket对象的内容
    25         // 谁发来的数据 getAddress()
    26         InetAddress ipAddress = dp.getAddress();
    27         String ip = ipAddress.getHostAddress();// 获取到了IP地址
    28         // 发来了什么数据 getData()
    29         byte[] data = dp.getData();
    30         // 发来了多少数据 getLenth()
    31         int length = dp.getLength();
    32         // 显示收到的数据
    33         String dataStr = new String(data, 0, length);
    34         System.out.println("IP地址:" + ip + "数据是" + dataStr);
    35         // 5,释放流资源
    36         receiveSocket.close();
    37     }
    38 }

      (3)UDP完成数据的发送

     1 import java.io.IOException;
     2 import java.net.DatagramPacket;
     3 import java.net.DatagramSocket;
     4 import java.net.InetAddress;
     5 
     6 /*
     7  * 发送端
     8  * 1,创建DatagramSocket对象
     9  * 2,创建DatagramPacket对象,并封装数据
    10  * 3,发送数据
    11  * 4,释放流资源
    12  */
    13 public class UDPSend {
    14     public static void main(String[] args) throws IOException {
    15         // 1,创建DatagramSocket对象
    16         DatagramSocket sendSocket = new DatagramSocket();
    17         // 2,创建DatagramPacket对象,并封装数据
    18         // public DatagramPacket(byte[] buf, int length, InetAddress address,
    19         // int port)
    20         // 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
    21         byte[] buffer = "hello,UDP".getBytes();
    22         DatagramPacket dp = new DatagramPacket(buffer, buffer.length,
    23                 InetAddress.getByName("192.168.0.4"), 12306);
    24         // 3,发送数据
    25         // public void send(DatagramPacket p) 从此套接字发送数据报包
    26         sendSocket.send(dp);
    27         // 4,释放流资源
    28         sendSocket.close();
    29     }
    30 }

      运行结果:

      

  • 相关阅读:
    CRC在线计算器
    freemodbus-v1.5.0 源码分析
    图及其实现
    最短路径
    交换排序-------快速排序
    FreeRTOS--删除任务
    Install OE and BitBake
    高端编程之DOM
    timeout使用实例
    使用JS提交表单
  • 原文地址:https://www.cnblogs.com/gzdlh/p/8157147.html
Copyright © 2020-2023  润新知