Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据

1. UDP协议发送数据 和 接收数据

 UDP协议发送数据:
   创建发送端的Socket对象
   创建数据,并把数据打包
   调用Socket对象的发送方法,发送数据包
   释放资源

 UDP协议接收数据:

      • 创建接收端的Socket对象
       创建数据包,接收数据(接收容器)
       调用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)运行:

-->先运行接收端(类似于先开启服务器

-->再运行发送端,这个时候,上面的接收端控制台,就会显示发送端发送过来的数据,效果如下:

原文地址:https://www.cnblogs.com/hebao0514/p/4858969.html