c# udp数据包发包发送

ericmpdeng 2015-02-16 05:16:10
有没有仁兄给我一个UDP分包发送例子啊,string 超过64K,要分包发送,求大家给个例子!谢谢
...全文
302 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
生财 2015-02-27
  • 打赏
  • 举报
回复
分包,带上序号,流水号, 客户端接收到包后,应答包顺号,流水号..当服务端都接收到客户端返回完整后,发送下一包数据,否则在超时时间内一直发送.
ericmpdeng 2015-02-26
  • 打赏
  • 举报
回复
不是的,我要用组播发送用户列表和在线用户列表,当用户量大的时候,单次发送的信息长度就会超过64K,所以考虑分包发送!
  • 打赏
  • 举报
回复
比如有些基于 http 的视频协议,每一个“包”通常只有2k大小。本来 http 可以传很大的内容(至少比你说的 64k 大千倍),可是人家为什么规定只传2、3k 呢? 因为不是纠结于传多大字节的问题。一次send信息时,能传出去3k也就足够用了。
sp1234_maJia 2015-02-17
  • 打赏
  • 举报
回复
所谓“分包”,是业务信令设计问题,不论 UDP 还是 TCP都需要信令设计。有些人去拿底层 IP 通讯的规范中的“数据包”概念去套,这到了真正需要用的时候,自然是“什么都不会了”。(因为底层再怎样分包,也不过是为了传送 byte 数据流而已,跟业务无关!) 设计业务信令,需要你从业务角度去出发,没有人能够替代你做最终的设计。因此主要是靠经验积累。 我们可以举一个例子: 例如发送某个文件(文件名唯一),那么我们可以最少定义三个通讯信令。 1. 传送文件的数据块,包括数据块内容、在文件中的偏移地址。 2. 获取文件某一块数据的校验值。这样可以通过检查对方文件的某一块数据的校验值,来判断是否需要重传。 3. 设置文件的总长度。这样给对方的文件设置长度,自动补充“0字节”或者自动截断多余的内容。 通过至少这3个命令,我们可以为对方传送文件。甚至可以用“1秒钟”传送1G大的文件。 从这个例子可以看出,如果你脱离了业务,你除了死抠“底层的数据分包”的名词儿是没有办法完成业务的。站在实践者的角度,那些貌似“过分技术化”的人往往是成事不足百事有余的,你必须根据业务的需求来设计更高层次的信令格式。不是含糊其辞地说一句“分包发送啊”就能知道你的需求的。
本拉灯 2015-02-17
  • 打赏
  • 举报
回复
引用 5 楼 abutwang 的回复:
UDP为什么要分包呢,UDP本身是一个包一个包发送的, 如果64k是一个包的话,分成10个包,如果接收漏了一个怎么办 by the way 帮顶
E. UDP就是要做成跟TCP一样的 Request->Ask 机制 只是TCP有帮我们做好了这种, UDP 你发一个包过去,对方接到后,回复一个我已收到,此时才继续发第二个包。如果发一个包后在一定时间范围内对方没有应答已收到,那将再发一次同样的包,连续试三次,对方都没有应答。说明掉线。
Forty2 2015-02-17
  • 打赏
  • 举报
回复
引用 1 楼 wyd1520 的回复:
http://www.cnblogs.com/gaochundong/archive/2013/04/14/csharp_udp_datagram_splitter.html
这个实现是错误的,因为它没有考虑到基本的UDP包丢失的情况。
引用 楼主 ericmpdeng 的回复:
有没有仁兄给我一个UDP分包发送例子啊,string 超过64K,要分包发送,求大家给个例子!谢谢
最好用TCP。TCP是可靠的,也不需要你字节去分包。 而基于UDP的可靠传输并不容易做。UDP比较适合那些允许一定丢包的情形,比如视频播放中少一两帧影响不大。
abutwang 2015-02-17
  • 打赏
  • 举报
回复
UDP为什么要分包呢,UDP本身是一个包一个包发送的, 如果64k是一个包的话,分成10个包,如果接收漏了一个怎么办 by the way 帮顶
本拉灯 2015-02-16
  • 打赏
  • 举报
回复
http://www.cnblogs.com/gaochundong/archive/2013/04/14/csharp_udp_datagram_splitter.html

110,525

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧