UDP通信

隐身守侯 提交于 2020-03-25 03:35:35

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 }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!