1. UDP协议发送数据 和 接收数据
UDP协议发送数据:
•
•创建数据,并把数据打包
•调用Socket对象的发送方法,发送数据包
• 释放资源
UDP协议接收数据:
• 创建接收端的Socket对象
•
•
•
• 释放资源
2. 代码实现
(1)首先我们先写发送端的程序,如下:
1 package com.himi.udpDemo;
2
3 import java.io.IOException;
4 import java.net.DatagramPacket;
5 import java.net.DatagramSocket;
6 import java.net.InetAddress;
7 import java.net.SocketException;
8 import java.net.UnknownHostException;
9
10 /**
11 *
12 * UDP协议发送数据:
13 * 1. 创建发送端的Socket对象
14 * 2. 创建数据,并把数据打包
15 * 3. 调用Socket对象的发送方法,发送数据包
16 * 4. 释放资源
17 *
18 */
19 public class UdpSendDemo {
20 public static void main(String[] args) throws IOException {
21 //创建发送端的Socket对象,这里使用的UDP使用的客户端的Socket对象类是DatagramSocket.
22 //DatagramSocket:DatagramSocket()
23 DatagramSocket ds = new DatagramSocket();
24
25 //创建数据,并把数据打包
26 //DatagramPacket:此类表示数据报包
27 /**DatagramPacket(byte[] buf, int length, InetAddress address, int port)
28 ** 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
29 */
30 //创建数据
31 byte[] bytes = "风云雄霸天下,风云必胜. 风云合璧,摩柯无量. 圣心诀,玄武真功".getBytes();
32 //IP地址对象
33 InetAddress address = InetAddress.getByName("49.123.72.145");
34 //端口号
35 int port = 10086;
36 //数据打包
37 DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
38
39
40 //调用Socket对象的发送方法,发送数据包
41 //public void send(DatagramPacket p)
42 ds.send(dp);
43
44
45 //释放资源
46 ds.close();
47
48 }
49
50
(2)其次实现的是接收端的代码,如下:
1 package com.himi.udpDemo;
2
3 import java.io.IOException;
4 import java.net.DatagramPacket;
5 import java.net.DatagramSocket;
6 import java.net.InetAddress;
7
8 /**
9 *
10 * UDP协议接收数据:
11 * 1. 创建接收端的Socket对象
12 * 2. 创建数据包,接收数据(接收容器)
13 * 3. 调用Socket对象的接收方法,接收数据包
14 * 4. 解析数据包,并显示在控制台
15 * 5. 释放资源
16 *
17 */
18
19 public class UdpReceiveDemo {
20
21 public static void main(String[] args) throws IOException {
22 // 创建接收端的Socket对象
23 //DatagramSocket(int port):创建数据报套接字并将其绑定到本地主机上的指定端口
24 DatagramSocket ds = new DatagramSocket(10086);
25
26 //创建数据包,接收数据(接收容器)
27 //DatagramPacket(byte[] buf, int length)
28 byte[] bytes = new byte[1024];
29 int length = bytes.length;
30
31 DatagramPacket dp = new DatagramPacket(bytes, length);
32
33 //调用Socket对象的接收方法,接收数据包
34 // public void receive(DatagramPacket p)
35 ds.receive(dp);//阻塞式方法
36
37 //解析数据包,并显示在控制台
38 //获取对方的IP
39 //public InetAddress getAddress()
40 InetAddress address = dp.getAddress();
41 String IP = address.getHostAddress();
42
43 //public byte[] getData():获取数据的缓冲区
44 //public int getLength():获取数据的实际长度
45 byte[] bys = dp.getData();
46 int len = dp.getLength();
47 String s = new String(bys,0,len);
48
49 System.out.println("发送端"+IP+"的数据:"+s);
50
51
52 //释放资源
53 ds.close();
54
55
56
57 }
58
59
(3)运行:
-->先运行接收端(类似于先开启服务器)
-->再运行发送端,这个时候,上面的接收端控制台,就会显示发送端发送过来的数据,效果如下: