免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1067 | 回复: 0
打印 上一主题 下一主题

udp收报文的方式跟tcp是不同的,做tcp习惯了呵呵容易混淆 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-15 11:28 |只看该作者 |倒序浏览

回复人:galaxy_fxstar(阿星)  二级(初级)  信誉:100      2005-1-31 14:37:46  得分:10
------//将上一个问题换一种提法:
若同一个socket连续发送了两个数据包(UDP,间隔很小),接收端采用recvfrom()接收,是一次接收完两个数据包,还是会分两次接收(一次一个包)?如果是后者的话,就不用确定数据边界了。
//
发送端使用sendto()和接收端使用recvfrom()是配对的,也就是说每使用一次recvfrom()只能接收一个sendto()发送的报文,而且两个函数的size是一致的,并且都制定了ip+port,这样的话接收可以准确并且唯一的得到数据。
对于多个机器做为发送端的情况,接收端应该为每个机器开一个线程来做处理。
TOP
回复人:gdy119(夜风微凉)  一星(中级)  信誉:105      2005-1-31 17:04:26  得分:20
to comman_wang (一加一) :
recvfrom(,,,size) 中可以指定你想收的IP+PORT,
如果错误的话,就是你同一个socket连续发送了数据
但recvfrom(,,,size)收到的SIZE变大了,这个到是要考虑的
//========================================================
抱歉,我做TCP惯了(^_^)所以上面我说的是TCP情况,UDP是面向
消息的协议,不管你调用多少次sendto(),而接收端调用了多少次recvfrom
(无论网络堆栈有多少数据可读)数据报是不会重叠的!!
还有我做补充的是,你发心跳包大小要一定,因为:
UDP数据报的数据区最大长度为1472字节(在局域网--以太网中),而在internet
中一般数据最大(路由器容许一次通过的数据包)为548字节,最好将UDP的数据长度控
制在548字节(576-8-20)以内.




udp收报文的方式跟tcp是不同的,做tcp习惯了呵呵容易混淆 ,另外的这种情况只存在tcp中吧 ,就是比如 tcp包发出去后 对方没有收到 这个时候就需要重传 ,此时就出现了2个tcp包叠加在一个包中的情况 呵呵 但这种情况在udp中应该不会出现的因为他没有保障机制



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/15071/showart_1131323.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP