欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于UDP的Socket通信

程序员文章站 2022-03-16 11:03:27
...

与TCP对应的UDP协议,是传输层的另一个协议,它只在IP协议上增加了应用程序多道处理和简单的错误校验功能。
UDP从应用程序接过报文,附上源端口和目的端口以及length、checksum字段成为UDP段,就直接递交给网络层;网络层将UDP段封装在IP数据报中后,尽力而为的将数据报传递给目标主机。
若数据报到达接收主机,UDP将根据IP地址和两个端口,将段中数据交给相应进程。其间,两个收发进程的传输层实体不存在握手过程,因此UDP被认为是无连接的。UDP段封装在IP数据报中发送,与TCP不同,UDP不能将数据报分段传输。
DNS(域名服务)是使用UDP的一个应用层协议,当运行载主机中的DNS程序需要进行查询时,它将组成一个DNS查询报文,发送给UDP Socket。在不进行握手过程的情况下,UDP给报文加上段头后,直接交付给网络层。网络层将该段封装在IP数据报中后,将数据报发送给域名服务器。发出DNS的主机将等待域名服务器的应答,若等待不到应答,它有可能向其它域名服务器重发查询报文,或者报告无法获得域名信息的结果。
本次UDP数据报通信主要用到两个类DatagramPacket和DatagramSocket,前者负责将待传输的数据封装成数据报包对象,再由数据报套接字DatagramSocket类提供的send()和receive()方法进行发送和接收操作。
UDP数据报通信的主要过程如图所示:
基于UDP的Socket通信

  1. 发送时:创建待发送数据报包pack,其中指定目标主机的IP地址和接收端口,调用DatagramSocket的send(pack)方法发送pack数据报,发送端口需为可用端口。
  2. 接收时,创建指定端口的DatagramSocket,调用其receive(pack)方法接收数据报,接收的数据报存放在pack包的缓存区内,再调用pack.getData()方法获得pack中的数据。
    对于上述过程可用简易代码实现:
    UDP的发送过程:
	public void UDP_Send(String msg)throws Exception {
   	
   	byte[] buffer = msg.getBytes();//Change String to byte
   	InetAddress desip = InetAddress.getByName(Destip);//create destination IP address
   	
   	DatagramPacket pack = new DatagramPacket(buffer, buffer.length, desip, Destport);//create send package
   	
   	DatagramSocket Socket = new DatagramSocket();//create send Socket
   	try {
   	Socket.send(pack);//send massage
   	}
   	catch (Exception e) {
   		System.out.println("UDP 数据报发送失败!");
   	}
   	Socket.close();
   }

UDP的接受过程:

	public String UDP_Receive()throws Exception {
   	
   	byte[] buffer = new byte[512];//create byte to receive massage
   	
   	DatagramPacket pack = new DatagramPacket(buffer, buffer.length);//create pack to receive massage 
   	
   	DatagramSocket socket = new DatagramSocket(port);//set port for receive socket
   	socket.receive(pack);//write received massage to pack
   	socket.close();
   	
   	return new String(pack.getData(),0,pack.getLength());//get received massage
   }

上述过程将UDP通信的主要过程展现出来,但是无法显示可观的实时通信过程。小编基于UDP的Socket通信实现了点对点的实时通信系统,并对比了UDP与TCP在通信过程的异同。
获取源码链接:基于UDP的点对点通信系统
提取码:cnrc
综上所述,TCP是面向可靠交付连接的通信协议,比较适合做点对点通信,而UDP是面向无连接的通信协议,可能会存在掉帧的情况,它比较适合做电视、电话线路的传输,因为这些情形需要的是实时交互,不是可靠交互。
以上内容仅是小编个人观点,如有错漏,还请广大读者朋友们批评指正,谢谢大家。

相关标签: UDP