网络编程之UDP协议
记住Socket 套接字
是传输层为应用层开辟的一个小口子【传输层这个概念来自网络七层协议】
不同协议下Socket实现不同
所以网络编程就是–》面向Socket编程
UDP协议特点
udp : 相当于写信|邮寄包裹 非面向连接的 只管写只管邮 协议简单,开销小,效率高 不安全 存在大小限制,一般不超过60k
UDP常用类和使用
UDP :
DatagramPacket 数据报包
DatagramSocket 此类表示用于发送和接收数据报包的套接字。
两端是平等,数据基于包裹,基于字节数组
------------------------------------------------------------
UDP协议实现基础的发送端 :
1.定义我是发送端 DatagramSocket(int port) 构造一个数据报套接字并将其绑定到本地主机上的指定端口。
2.准备数据
3.数据打包
4.发送端发送包裹 void send(DatagramPacket p) 从此套接字发送数据报包。
5.关闭
----------------------------------------------------------------------------------
UDP协议实现基础的接收端 :
1.定义我是接收端
2.准备包裹用来接收数据
3.接收端接收数据
4.处理数据
5.关闭
定义发送端代码
public static void main(String[] args) throws IOException {
//1.定义我是发送端
DatagramSocket sendSocket = new DatagramSocket(9999);
//2.准备数据
byte[] arr = "你好".getBytes();
//3.数据打包
//DatagramPacket(byte[] buf, int length, SocketAddress address) 构造数据报包,用于将长度为 length的数据包发送到指定主机上的指定端口号。
DatagramPacket packet = new DatagramPacket(arr,0,arr.length,new InetSocketAddress("localhost",9898));
//4.发送端发送包裹
sendSocket.send(packet);
//5.关闭
sendSocket.close();
}
定义接收端代码
public static void main(String[] args) throws IOException {
System.out.println("-----------------接收端---------------------");
//1.定义我是接收端
DatagramSocket receiveSocket = new DatagramSocket(9898);
//2.准备包裹用来接收数据
byte[] arr = new byte[1024];
DatagramPacket packet = new DatagramPacket(arr,0,arr.length);
//3.接收端接收数据
receiveSocket.receive(packet);
//4.处理数据
//byte[] getData() 返回数据缓冲区。
//int getLength() 返回要发送的数据的长度或接收的数据的长度。
byte[] result = packet.getData();
int len = packet.getLength();
System.out.println(new String(result,0,len));
//5.关闭
receiveSocket.close();
}