zoukankan      html  css  js  c++  java
  • UDP通信

    1、UDP概述

    UDP(User Datagram Protocol):用户数据报协议,是一种面向无连接的协议,在通信时发送端和接收端不用建立连接。

    2、DatagramPacket

    DatagramPacket用于封装数据,在接收端和发送端的DatagramPacket方法有所不同,接收端的构造方法只需要接受一个字节数组来存放接收到的数据,而发送端的构造方法不但要接受发送数据要存放的字节数组,还需要指定发送端IP地址和端口号。

    接收端构造方法:

    DatagramPacket(byte[] buf, int length):构造DatagramPacket,用来接受长度为length的数据包。

    发送端构造方法:

    DatagramPacket(byte[] buf, int length, InteAddress address, int port):构造数据包,用来将长度为length的包发送到指定主机上的指定端口号。

    常用方法:

    • InetAddress getAddress():返回某台机器的IP地址,此数据报将要发往该机器或者是从该机器接收到的。
    • int getPort():返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接受到的。
    • getData():返回数据缓冲区。
    • int getLength():返回将要发送或接收到的数据的长度。

    3、DatagramSocket

    DatagramSocket类的常用构造方法:

    • DatagramSocket():构造数据报套接字并将其绑定到本地主机上的任何可用的端口。
    • DatagramSocket():构造数据报套接字并将其绑定到本地主机上的指定端口。

    常用方法:

    • void receive(DatagramPacket p):从此套接字接收数据报包。
    • void send(DatagramPacket p):从此套接字发送数据报包。

    4、UDP网络程序

    UDP接收端

     1 package udp;
     2 
     3 import java.io.IOException;
     4 import java.net.DatagramPacket;
     5 import java.net.DatagramSocket;
     6 import java.net.InetAddress;
     7 
     8 /**
     9  * <p>Description:UDP接收端 </p>
    10  * @author Administrator
    11  * @date 2018年11月6日下午3:17:01
    12  */
    13 public class UDPReceive {
    14 
    15     public static void main(String[] args) throws IOException {
    16         // 创建DatagramSocket对象,并指定端口号
    17         DatagramSocket ds = new DatagramSocket(6000);
    18         // 创建一个空仓库
    19         byte[] buffer = new byte[1024];
    20         // 创建DatagramPacket对象
    21         DatagramPacket dp = new DatagramPacket(buffer, 1024);
    22         // 接受数据
    23         ds.receive(dp);
    24         // 获取DatagramPacket对象内容
    25         InetAddress ipAddress = dp.getAddress();
    26         String ip = ipAddress.getHostAddress();
    27         // 解析数据
    28         byte[] data = dp.getData();
    29         int length = dp.getLength();
    30         // 显示接受到的数据
    31         String dataStr = new String(data, 0, length);
    32         System.out.println("ip地址:" + ip + "数据是:" + dataStr);
    33         // 释放资源
    34         ds.close();
    35     }
    36 
    37 }

    UDP发送端

     1 package udp;
     2 
     3 import java.io.IOException;
     4 import java.net.DatagramPacket;
     5 import java.net.DatagramSocket;
     6 import java.net.InetAddress;
     7 
     8 /**
     9  * <p>Description:UDP发送端 </p>
    10  * @author Administrator
    11  * @date 2018年11月6日下午3:07:53
    12  */
    13 public class UDPSend {
    14 
    15     public static void main(String[] args) throws IOException {
    16         // 创建DatagramSocket对象
    17         DatagramSocket ds = new DatagramSocket();
    18         // 构造数据报包,用来将长度为length的包发送到指定主机的指定端口号上
    19         byte[] buffer = "hello,UDP".getBytes();
    20         // 创建InetAddress对象,封装自己的IP地址
    21         InetAddress inet = InetAddress.getByName("127.0.0.1");
    22         // 创建DatagramPacket对象
    23         DatagramPacket dp = new DatagramPacket(buffer, buffer.length, inet, 6000);
    24         // 发送数据
    25         ds.send(dp);
    26         // 释放资源
    27         ds.close();
    28     }
    29 
    30 }
  • 相关阅读:
    10.异常
    9.1 oop习题集合
    9.抽象类和接口
    8.oop-多态
    AngularJs学习笔记二
    浅谈如何坚持计划
    妙味课堂——JavaScript基础课程笔记
    前端学习-试卷
    jquery实战
    boost any
  • 原文地址:https://www.cnblogs.com/alphajuns/p/9915602.html
Copyright © 2011-2022 走看看