本案例演示两个类之间的通讯

时间:2022-04-11 20:14:33
 1 package NetWork;
2
3 import java.net.DatagramPacket;
4 import java.net.DatagramSocket;
5 import java.net.InetAddress;
6
7 public class Udp_Demo {
8 public static void main(String[] args) {
9
10 }
11 }
12
13 /*
14 * UDP发送端 UDP传输 1.DatagramSocket与DatagramPacket 2.建立发送端,接收端 3.建立数据包;
15 * 4.调用Socket的发送接收方法 5.关闭Socket 发送端与接收端是两个独立的运行程序
16 *
17 * 需求:通过udp传输方式,将一段文字数据发送出去 1.建立UDPsocket服务 2.提供数据,并将数据封装到数据包中
18 * 3.通过socket服务的发送功能,将数据包发送出去 4.关闭资源
19 */
20
21 /*
22 * 编写一个类,做为UDP的发送端;
23 */
24 class UdpOut {
25 public static void main(String[] args) throws Exception {
26 // 1.创建UDPSocket服务,通过DatagrameSocket对象,
27 DatagramSocket ds = new DatagramSocket();
28
29 // 2.确定数据,并且封装成数据包
30 byte[] data = "maple".getBytes(); // 确定数据,将字符使用getBytes()方法转换成字节数据,存放在数组里面去
31
32 // 创建一个DatagramPacket包中,将数据data数据封装进去,长度是data.length,
33 // 发送地址是InetAddress.getByName("192.168.1.101"),端口号是:4443;
34 DatagramPacket dp = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.1.101"), 4443);
35
36 // 3.通过DatagramSocket服务的send方法 ,将已经封装好的数据包发送出去
37 ds.send(dp);
38
39 // 4.关闭资源
40 ds.close();
41 }
42 }
43
44 /*
45 * 编写一个类,做为UDP的接收端 需求:定义一个应用程序,肜于接收UDP协议传输的数据并处理
46 * 1.定义一个UDP的Socket服务
47 * 2.定义一个数据包,用来存储接收到数据包,该数据包中有更多的功能可以提取字节数据包中的不同数据信息
48 * 3.通过Socket服务的receive方法将数据存入到已经定义好的数据包中
49 * 4.通过数据包对象的特有功能,将这些不同的数据取出 5.关闭资源
50 */
51 class UdpReceive {
52 public static void main(String[] args) throws Exception {
53 // 创建UDP的Socket服务,建立端点,在建立接收端的时候,一般都会监听一个端口
54 DatagramSocket ds = new DatagramSocket(4443);
55
56 // 2.定义一个数据包,用来存储数据的
57 byte[] buf = new byte[1024]; // 创建一个数组,用来存储数据
58 DatagramPacket dp = new DatagramPacket(buf, buf.length);
59
60 // 3.通过服务的receive方法将收到的数据存入
61 ds.receive(dp);
62
63 // 4.通过数据包的方法,获取其中的数据
64
65 // 获取IP地址,调用getAddress返回来一个InetAddress对象,再调用对象的getHostAddress返回来一个字符串
66 String ip = dp.getAddress().getHostAddress();
67
68 // dp.getData(),0,dp.getLength()调用dp的getData方法
69 // ,获取数据,从0开始获取,直到dp.getLength的最大长度,并且将获取到的字节转换成字符;存储到变量中
70 String value = new String(dp.getData(), 0, dp.getLength());
71
72 // 获取端口号
73 int port = dp.getPort();
74
75 System.out.println("ip:" + ip + "; 端口:" + port + ";数据:" + value);
76 }
77 }