socket编程中采用udp协议的返回值问题。
使用TCP协议时,调用send函数发送n个字节的数据,返回值有可能小于n,这时需要将剩下的数据发送出去。但是使用UDP协议时,调用sendto函数,有可能返回值小于我的发...
使用TCP协议时,调用send函数发送n个字节的数据,返回值有可能小于n,这时需要将剩下的数据发送出去。但是使用UDP协议时,调用sendto函数,有可能返回值小于我的发送期望值吗?
展开
2个回答
展开全部
一个数据包(帧)大小1152(记不太清楚了,但相差不大),去掉各种协议头,真正的数据部分比1K大点,写程序的话最好每次发送1K数据,这样不会拆包,效率氏知雀高点。至于你那个问歼早题自己写个程序一试便知为何在此苦问还一定正确。 就算你用tcp传最好每次只发猛粗送1K,分多次发。 拆包和重组(排序)还是挺浪费时间的。 tcp优势不是传大文件快或好,而是数据正确性高,udp优势在于效率高(无需确认),数据正确性稍差。 大文件传输可自己用编程小技巧如索引自己重组或直接用tcp。
以上皆以个人看法,若路过大神看到请勿乱批。
本人只是学生,相关知识也快忘尽。
以上皆以个人看法,若路过大神看到请勿乱批。
本人只是学生,相关知识也快忘尽。
展开全部
我觉得阻塞模型下如果发送成功的话应该没可能裂铅乱。udp又不会拆激握包,调用一次就发一个包,太长了路上给你丢包,再长下去直接函数就返肆档回出错,
更多追问追答
追问
sendto调用一次发送一个数据包?一个数据包的最大长度是多少?这个数据包是自己定义的吗,还是仍给它一个字符串,函数自己构建数据包?
追答
对啊,sendto第二个参数记得就是要发送的数据包的内容了。一次发一个。
长度似乎最高可以到接近64k的样子(是接近,没有真正到64k。这个是受到ip层数据包大小的限制)
不过实际使用中到了四五十k基本上就很难发到对方那边去了,因为中途遇到的路由器(指的不是你家用来接多台电脑的那种,是电信运营商用的那种)很可能直接把你数据包扔掉了,所以发的数据包还是小一点好。不知道10几k是不是合适……我udp用得少,不过那些联网游戏发的数据包大部分都10k不到,有的甚至1k不到
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询