c# udp数据包发包发送 http://www.cnblogs.com/gaochundong/archive/2013/04/14/csharp_udp_datagram_splitter.html 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个实现是错误的,因为它没有考虑到基本的UDP包丢失的情况。最好用TCP。TCP是可靠的,也不需要你字节去分包。而基于UDP的可靠传输并不容易做。UDP比较适合那些允许一定丢包的情形,比如视频播放中少一两帧影响不大。 所谓“分包”,是业务信令设计问题,不论 UDP 还是 TCP都需要信令设计。有些人去拿底层 IP 通讯的规范中的“数据包”概念去套,这到了真正需要用的时候,自然是“什么都不会了”。(因为底层再怎样分包,也不过是为了传送 byte 数据流而已,跟业务无关!)设计业务信令,需要你从业务角度去出发,没有人能够替代你做最终的设计。因此主要是靠经验积累。我们可以举一个例子:例如发送某个文件(文件名唯一),那么我们可以最少定义三个通讯信令。1. 传送文件的数据块,包括数据块内容、在文件中的偏移地址。2. 获取文件某一块数据的校验值。这样可以通过检查对方文件的某一块数据的校验值,来判断是否需要重传。3. 设置文件的总长度。这样给对方的文件设置长度,自动补充“0字节”或者自动截断多余的内容。通过至少这3个命令,我们可以为对方传送文件。甚至可以用“1秒钟”传送1G大的文件。从这个例子可以看出,如果你脱离了业务,你除了死抠“底层的数据分包”的名词儿是没有办法完成业务的。站在实践者的角度,那些貌似“过分技术化”的人往往是成事不足百事有余的,你必须根据业务的需求来设计更高层次的信令格式。不是含糊其辞地说一句“分包发送啊”就能知道你的需求的。 比如有些基于 http 的视频协议,每一个“包”通常只有2k大小。本来 http 可以传很大的内容(至少比你说的 64k 大千倍),可是人家为什么规定只传2、3k 呢?因为不是纠结于传多大字节的问题。一次send信息时,能传出去3k也就足够用了。 E. UDP就是要做成跟TCP一样的 Request->Ask 机制 只是TCP有帮我们做好了这种,UDP 你发一个包过去,对方接到后,回复一个我已收到,此时才继续发第二个包。如果发一个包后在一定时间范围内对方没有应答已收到,那将再发一次同样的包,连续试三次,对方都没有应答。说明掉线。 请问大家如何实现这种功能? C#调用cmd.exe窗体不显示内容的问题。 获取menustrip单击菜单的值 c# 需要操作数组类中的数据 怎么办? 有点看不明白的代码? 录入重复信息的问题 关于DataTable的问题 ASP.NET 中,float类型数据为何精度丢失严重? 让我们的WinXP同时出来两个亮的标题栏窗口,不信,进来看看! 如何得到一个可执行文件的版本号 问一个关于用C#处理word文档的问题,着急用! C#将int型的数直接用定时器100ms一次赋值给textbox内存增长
而基于UDP的可靠传输并不容易做。UDP比较适合那些允许一定丢包的情形,比如视频播放中少一两帧影响不大。
1. 传送文件的数据块,包括数据块内容、在文件中的偏移地址。
2. 获取文件某一块数据的校验值。这样可以通过检查对方文件的某一块数据的校验值,来判断是否需要重传。
3. 设置文件的总长度。这样给对方的文件设置长度,自动补充“0字节”或者自动截断多余的内容。通过至少这3个命令,我们可以为对方传送文件。甚至可以用“1秒钟”传送1G大的文件。从这个例子可以看出,如果你脱离了业务,你除了死抠“底层的数据分包”的名词儿是没有办法完成业务的。站在实践者的角度,那些貌似“过分技术化”的人往往是成事不足百事有余的,你必须根据业务的需求来设计更高层次的信令格式。不是含糊其辞地说一句“分包发送啊”就能知道你的需求的。
E. UDP就是要做成跟TCP一样的 Request->Ask 机制 只是TCP有帮我们做好了这种,
UDP 你发一个包过去,对方接到后,回复一个我已收到,此时才继续发第二个包。如果发一个包后在一定时间范围内对方没有应答已收到,那将再发一次同样的包,连续试三次,对方都没有应答。说明掉线。