开发者学堂课程【大数据 ZooKeeper 快速入门: 网络编程:socket—基于 UDP 服务端编程】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/549/detail/7581
网络编程:socket—基于 UDP 服务端编程
一、socket—基于 UDP 协议编程
首先在 diea 中创建一个名为的类,创建完成后写一个 main 方法,以此来进行运行,输入 psvm 可快速写出 main 方法。
编程前梳理流程:
1. 在服务端创建服务端 socket 对象 DatagromSocket
2. 创建对象后需要接收数据,使用自带的方法接收数据
3. 接受数据后,因为原始数据是打包发送过来的,所以需要针对数据包进行解析,解析完成后才可以获取数据包中的内容
4. 最终进行释放资源
当逻辑清楚后再进行代码实现就更加简单。
代码实现:
public class UDPSocketServer {
public static void main(String[] args) throws Exception {
//创建服务端 socket 对象 DatagramSocket
//客户端向一个端口发送出去,所以这里需要一个端口接收,这个端口需要和客户端保持一致,所以 new 一个 DatagramSocket 对象,并且在里面输入端口号12321(需要和客户端端口保持一致),这样发送的数据才能被接收。这里需要抛出一个异常,直接抛出最大的异常 throws Exception
DatagramSocket server = new DatagramSocket(12321);
//接收数据,通过 server 接收数据,在其中调用 receive 包,创建一个 packet 包来进行接收数据,因此在接收数据时还要创建数据包
server.receive(packet);
//创建接收数据的数据包(数据接收的容器)
//创建 bys 数组进行存放,限制大小
byte[] bys = new byte[1024];
//传 入 bys,并指定 bys 长度,这样就创好了接收数据的容器,服务端就可以接收由客户端发送的数据包,接下来就要对数据包进行解析
DatagramPacket_packet = new DatagramPacket(bys, bys.length);
//针对数据包进行解析
//获取地址和主机名,创建host进行存放
String host = packet.getAddress().getHostAddress();
//通过 packet 进行获取数据并放入 byte[]数组中
byte[] data = packet.getData();
//直接进行打印接收到的数据,这样就完成了接收数据包的解析
System.out.println("接收来自"+host+"信息: "+new String(data));
//释放资源,对 server 进行关闭
Server.close();
}
}
//完成基于 udp 协议的编写
直接右键运行 main 方法进行测试,切换到服务端发现成功接收到了信息:
接收来自192.168.158.1信息,hello udp?
这就是基于 udp 的 socket 通信