Udp分包过程(C#)
来源:互联网 发布:武汉理工大网络 编辑:程序博客网 时间:2024/05/18 21:43
Send与SendTo以及Receive与Receivefrom之间的区别?
一般情况下:
Send、Receive用于TCP
SendTo、Receivefrom用于UDP
Udp发送超大文件一般采用分包发送的方式
Udp分包数据量的上限: 65k
#region 分包处理 public static ICollection<UdpPacket> Split( byte[] datagram, int chunkLength) { string FILE = "First";//第一个分包的标识 string Mid= "Mid"; //后续分包 的标识 if (datagram == null) throw new ArgumentNullException("datagram"); //存储所有的数据包 List<UdpPacket> packets = new List<UdpPacket>(); //完整的UDP数据包 int chunks = datagram.Length / chunkLength; //最后一个不完整的数据包的数据量 int remainder = datagram.Length % chunkLength; //判断最后一个数据包,计算总的数据包 int total = chunks; if (remainder > 0) total++;
//进行分包,区别对待第一个包和后续包
//遍历所有的完整的UDP数据包 for (int i = 1; i <= chunks; i++) { byte[] chunk=new byte[chunkLength]; Buffer.BlockCopy(datagram,(i-1)*chunkLength,chunk,0,chunkLength);
//第一个分包 if (i == 1) { packets.Add(new UdpPacket(FILE,total, i, chunk, chunkLength, remainder)); }
//后续分包标识 else packets.Add(new UdpPacket(Mid, total, i, chunk, chunkLength, remainder)); }
//最后一个分包 if (remainder > 0) { if (total != 1) { int length = datagram.Length - (chunkLength * chunks); byte[] chunk = new byte[length]; Buffer.BlockCopy(datagram, chunks * chunkLength, chunk, 0, length); packets.Add(new UdpPacket(Mid, total, total, chunk, chunkLength, remainder)); } else { int length = datagram.Length - (chunkLength * chunks); byte[] chunk = new byte[length]; Buffer.BlockCopy(datagram, 0, chunk, 0, length); packets.Add(new UdpPacket(FILE, total, total, chunk, chunkLength, remainder)); } } return packets; } #endregion
0 0
- Udp分包过程(C#)
- UDP分包重组算法
- UDP分包重组算法
- UDP分包问题
- UDP TCP 分包问题
- UDP分包问题
- UDP分包重组算法2
- UDP分包重组算法 1
- 以太网中的UDP编程:udp分包问题
- 以太网中的UDP编程:udp分包问题
- 关于UDP发包长度及分包问题限制问题(笔记)
- C#基于Udp的分包传输
- 【转】C#实现UDP分包组包
- ip分包研究-以UDP为例
- UDP分包组包的类
- ant分包环境搭建过程
- Android分包(Multidex)
- UDP分包重组算法和 基于RTP的H264视频数据分包重组
- C++函数参数传递三种方式
- ubuntu 14.04 安装后的首要四五件事
- 《Mastering Opencv ...读书笔记系列》车牌识别(I)
- Java关键字final、static使用总结
- 八位二进制数为什么表示范围是:-128~~+127?
- Udp分包过程(C#)
- Android 引用外部项目库
- SUSE 在Intel举行"Rule The Stack"的竞赛中获得 "Openstack安装最快速"奖
- 斐波那契数列
- JSP访问Hadoop 图片存储服务
- 夏天约会蚊子多
- Maven依赖范围
- 为什么用eclipse启动tomcat就能打开exec要执行的命令,而直接用安装版的tomcat就打不开呢
- eclipse报错:one or more constraints have not been satisfied