基于UDP的可靠性高速传输(大文件)的实现(一)

TCP 协议和 UDP 协议是 TCP / I P协议栈中的两个最主要的传输层协议. 其中 TCP 提供可靠的、 有序的、 端到端的数据传输服务, 而 UDP则提供的是不可靠的、 不保证有序到达的、 端到端的数据传输服务. TCP 协议一般应用在数据传输量大或可靠性要求高的场合 (例如: 文件传输 ); UDP协议则一般是应用在数据传输量不大且可靠性要求不高的场合.
然而, 在实践中却会经常碰到这样的情况, 需要传输的数据不连续或数据量不确定, 但可靠性却要求很高. 例如这个项目: 一银行终端管理软件, 网内终端数量最少时 2 台, 最多时可达 150 台, 传输的数据具
有实时性, 最少时只需传输几个字节 ( 例如: 远程关机、 重启等简单指令 ) , 最多可达几 KB ( 例如: 远程设置
终端属性 ), 要求数据在传输过程中安全可靠. 在该系统中到底该采用哪种协议作为传输层协议呢? 采用
TCP 协议则会因为开辟的侦听线程过多而直接导致服务器的效率下降, 特别是该系统中的终端机根本就
没有多余的资源可以浪费; 如果采用 UDP协议, 虽然可以解决资源浪费问题, 但该协议是一种不可靠的没有差错处理的协议, 而该系统必须保证数据传输过程中的安全可靠. 因此针对这种情况应该放弃采用 TCP协议作为传输层协议的方案, 而是采用 UDP协议作为传输协议通过增加差错处理、 拥塞控制等措施来提高数据传输的安全性与可靠性.

以上文字摘自--周锦才的可靠 UDP 协议的设计思路与实现方法论文。

对于UDP的可靠性传输已经研究了几天,今天实现了大文件的可靠性传输的初步,在接下来的几天里,会把它慢慢实现。

好的,下面入正题。

我们要先定义可靠性UDP的数据报,这相当于一种协议,只不过是由我们自己定义的。

先说说整体思路:

对于大文件的UDP传输,在发送端,首先要发送一个开始发送数据包,在接受端接受到这个开始发送数据包以后,要发送一个开始发送确认数据包,当发送端在一定时间内(这个时间根据网络情况自己调整)收到了确认数据包以后,开始将一个大文件分成若干个组,每个组包含n个数据包,每个数据包长m。然后根据上面发送开始发送数据包相似的原理,进行发送(这一部分很复杂,具体实现我也还在研究,在后文中会详细解析,敬请关注)。

当发送端发送完到最后一个数据包时,向接收端发送一个发送完成包,在收到接收端发来的反馈后,结束发送。

在以下代码中,实现了开始数据包的收发实现。

发送端




import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Random;

import javax.xml.crypto.Data;


public class UdpSend {
	private int myPort;// 我方端口
	private int otherPort;// 对方端口
	private String otherIP;// 对方IP
	private DatagramSocket dataSocket;
	private final int GROUP_DATA = 256;// 一个组拥有的数据包个数
	private final int DATA_LEN = 1024;
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值