当前位置: 代码迷 >> C# >> c# udp数据包发包发送,该怎么解决
  详细解决方案

c# udp数据包发包发送,该怎么解决

热度:105   发布时间:2016-05-05 04:34:51.0
c# udp数据包发包发送
有没有仁兄给我一个UDP分包发送例子啊,string 超过64K,要分包发送,求大家给个例子!谢谢
------解决思路----------------------
所谓“分包”,是业务信令设计问题,不论 UDP 还是 TCP都需要信令设计。有些人去拿底层 IP 通讯的规范中的“数据包”概念去套,这到了真正需要用的时候,自然是“什么都不会了”。(因为底层再怎样分包,也不过是为了传送 byte 数据流而已,跟业务无关!)

设计业务信令,需要你从业务角度去出发,没有人能够替代你做最终的设计。因此主要是靠经验积累。

我们可以举一个例子:

例如发送某个文件(文件名唯一),那么我们可以最少定义三个通讯信令。
1. 传送文件的数据块,包括数据块内容、在文件中的偏移地址。
2. 获取文件某一块数据的校验值。这样可以通过检查对方文件的某一块数据的校验值,来判断是否需要重传。
3. 设置文件的总长度。这样给对方的文件设置长度,自动补充“0字节”或者自动截断多余的内容。

通过至少这3个命令,我们可以为对方传送文件。甚至可以用“1秒钟”传送1G大的文件。

从这个例子可以看出,如果你脱离了业务,你除了死抠“底层的数据分包”的名词儿是没有办法完成业务的。站在实践者的角度,那些貌似“过分技术化”的人往往是成事不足百事有余的,你必须根据业务的需求来设计更高层次的信令格式。不是含糊其辞地说一句“分包发送啊”就能知道你的需求的。
------解决思路----------------------
比如有些基于 http 的视频协议,每一个“包”通常只有2k大小。本来 http 可以传很大的内容(至少比你说的 64k 大千倍),可是人家为什么规定只传2、3k 呢?

因为不是纠结于传多大字节的问题。一次send信息时,能传出去3k也就足够用了。
  相关解决方案