基于UDP的Socket通信

与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数据报通信的主要过程如图所示:
在这里插入图片描述

  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是面向无连接的通信协议,可能会存在掉帧的情况,它比较适合做电视、电话线路的传输,因为这些情形需要的是实时交互,不是可靠交互。
以上内容仅是小编个人观点,如有错漏,还请广大读者朋友们批评指正,谢谢大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值