Java网络编程之UDP协议数据传输

一、UDP数据传输方式

数据传递采用数据包方式传递,所有的数据要进行打包操作,并且没有对应的客户端服务器概念,有且只有发送段和接收端。

Socket 套接字
数据需要进行传递操作,在数据传递的两台计算机当中必须有对应的Socket。这里采用UDP协议,那么必须有一个UDP协议的Socket

DatagramSocket();
	创建一个发送端UDP协议Socket对象
DatagramSocket(int port);
	创建一个接收端UDP协议的Socket对象,这里需要【监听】指定端口

发送端数据包的打包方法:

DatagramPacket DatagramPacket(byte[] buf, int length, InetAddress address, int port);
	buf: 需要传递数据的字节数组
	length:是当前字节数组中数据容量字节数
	address:接收端IP地址对象
	port: 接收端对应的端口号

接收端数据包接收方式,需要准备一个空的数据包

DatagramPacket DatagramPacket(byte[] buf, int length);
	buf: 字节缓冲数组,通常是1024整数倍
	length: 当前字节缓冲数组的容量

二、发送端

1、流程
1. 创建UDP服务器对应的发送端Socket
2. 准备对应数据包,需要带有指定数据
3. 发送数据 send
4. 关闭UDP发送端
2、代码
public class SenderDemo {
	public static void main(String[] args) throws IOException {
		System.out.println("发送端启动");
		// 创建对应的Socket
		DatagramSocket socket = new DatagramSocket();
		
		// 准备数据包
		byte[] bytes = "来自发送端的数据".getBytes();
		DatagramPacket packet = new DatagramPacket(bytes, bytes.length,
				InetAddress.getLocalHost(), 8848);
		
		// 发送数据包
		socket.send(packet);
		
		// 关闭UDP发送端
		socket.close();
	}
}	

三、接收端

1、流程
1. 打开UDP服务,并且监听指定端口
2. 创建新的空数据包
3. 通过Socket接收数据 
4. 关闭UDP服务接收端
2、代码
public class ReceiveDemo {
	public static void main(String[] args) throws IOException {
		// 创建Socket监听端口
		DatagramSocket socket = new DatagramSocket(8848);
		
		// 准备空数据包
		byte[] buf = new byte[1024];
		DatagramPacket packet = new DatagramPacket(buf, buf.length);
		
		// 接收数据
		socket.receive(packet);
		
		// 确定接收到的字节长度
		int length = packet.getLength();
		
		System.out.println(new String(buf, 0, length));
		
		// 关闭socket
		socket.close();
	}
}

四、UDP数据传递丢失问题

当使用UDP协议进行数据传递时,有可能在传递内容较大时发生数据丢失的问题。发生这种情况的原因有很多,例如:

  1. 网络不够好,稳定性不行,带宽不够
  2. 电脑性能不好
发布了13 篇原创文章 · 获赞 24 · 访问量 8148

猜你喜欢

转载自blog.csdn.net/Betterman_QS/article/details/104659530