免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: commandow01
打印 上一主题 下一主题

问一个select函数的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-06-20 16:28 |只看该作者
回复 3# liqingfang

就是堆积了多次的数据,意思是此时我去读的话读出来的数据长度会大于单次发送的长度。比如我用recv函数定义了上限2700个字节,此时接收的话就是2700个字节全部接收下来。而单次的数据长度可能只有2400。而且这2700个字节的数据还是错误的!

论坛徽章:
0
12 [报告]
发表于 2011-06-20 16:29 |只看该作者
回复 5# int-main


    我觉得这个建议挺好的,为什么不可行呢?

论坛徽章:
0
13 [报告]
发表于 2011-06-20 16:40 |只看该作者
回复  int-main


    我觉得这个建议挺好的,为什么不可行呢?
commandow01 发表于 2011-06-20 16:29



   
你怎么能确定“提交到线程”的这段时间不会有多个新的数据到达。

论坛徽章:
0
14 [报告]
发表于 2011-06-20 17:48 |只看该作者
回复  huycwork


    读出来的数据全是混乱的,根本不知道是什么数据!
commandow01 发表于 2011-06-20 16:24



    啊?按理说,内核会维护一个缓冲区和一个计数指针吧,照你这么说,每次数据到来时就必须立刻响应,还得一次性全部读出来?

论坛徽章:
0
15 [报告]
发表于 2011-06-20 21:25 |只看该作者
回复 14# huycwork


    所以说我也是觉得奇怪啊,如果出现两次以上的数据粘在一起的情况下,我把数据读出来就是无序的!

论坛徽章:
0
16 [报告]
发表于 2011-06-20 21:39 |只看该作者
lz是不是TCP,tcp是数据流,lz的问题应该是没有定义数据头,后面接收数据处理要根据数据头信息长度来处理,比如:你开一个buf,recv只管接收数据到buf中,然后处理时读取buf里的数据。

buf里数据格式为:len(uint) + msg

论坛徽章:
0
17 [报告]
发表于 2011-06-20 22:12 |只看该作者
回复 15# commandow01


    不会吧,数据流怎么可能会连顺序都不对了,肯定是你没分清边界。如果是TCP的话,早处理和晚处理都是一样的,只要收到数据就都在缓冲区里面,你把每次的数据按字节打印出来分析。

论坛徽章:
0
18 [报告]
发表于 2011-06-20 22:14 |只看该作者
回复 16# 独臂剑客


   我不是很清楚你的意思,但我现在做的是先建产tcp socket连接,然后在接收端处理时由于处理速度的问题造成下一次数据通过recv读取出来会超过一次的发送量大小。
如果按你说的包头有信息量的长度的话,读出来我觉得还是应该是正常长度的。现在不仅是读出来超过长度,而且数据还是错误的。

论坛徽章:
0
19 [报告]
发表于 2011-06-20 23:22 |只看该作者
回复 18# commandow01


     包头都是你自己加的,用于消息控制的,要不就像下面这个例子一样,以特殊标识符作为结束符判断 。
      http://www.oschina.net/code/snippet_102078_2670
      lz需要多理解一下tcp流的相关使用。

论坛徽章:
0
20 [报告]
发表于 2011-06-20 23:34 |只看该作者
mark~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP