免费注册 查看新帖 |

Chinaunix

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

请教:如何收取tcp协议包? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-11-23 09:34 |只看该作者
你不用去关心收上来的是多少个包,你只需要判断包里的内容就可以了!你不是有结束标志吗,就去找结束标志,找到了表示一个包结束了,找不到表示一个包没有结束,就把从上次结束开始到缓冲区尾的所有数据保存到另外一个缓冲区,直到收完一个包再进行处理!
第二种方式就是用两个线程,一个负责收数据往缓冲队列中放,一个就从缓冲队列取数据分析!

不知道我说明白了没有!

[ 本帖最后由 ljok30 于 2007-11-23 09:36 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2007-11-23 09:45 |只看该作者
原帖由 anthony1983 于 2007-11-23 09:18 发表
recv如下情况会返回
1. 收到一个完整数据包
2.到达缓存区(包未完整)
3.出错

这样就能保证recv出来的,是一个完整的包,或者不完整,绝对不可能出现多个包!

缓存区的设置是一个为了提高效率,减少re ...

不是的,你说的返回一个完整的数据包仅仅是在udp的情况下才发生.tcp会收你指定的的字节后返回

论坛徽章:
0
13 [报告]
发表于 2007-11-23 10:19 |只看该作者
先收下来再说。

论坛徽章:
0
14 [报告]
发表于 2007-11-23 10:51 |只看该作者
原帖由 yuangong 于 2007-11-23 09:45 发表

不是的,你说的返回一个完整的数据包仅仅是在udp的情况下才发生.tcp会收你指定的的字节后返回

那是阻塞状态下。。。。。。。。。。。。。!
man recv 中的一段话

If no messages are available at the socket, the receive call
     waits  for  a  message  to arrive, unless the socket is non-
     blocking

[ 本帖最后由 anthony1983 于 2007-11-23 10:52 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2007-11-23 10:57 |只看该作者
尽量不要用阻塞方式
而是采取select/poll  结合非阻塞方式
因为阻塞方式会导致CPU占用率过高

论坛徽章:
0
16 [报告]
发表于 2007-11-23 11:01 |只看该作者
原帖由 anthony1983 于 2007-11-23 10:57 发表
尽量不要用阻塞方式
而是采取select/poll  结合非阻塞方式
因为阻塞方式会导致CPU占用率过高

真的?

论坛徽章:
0
17 [报告]
发表于 2007-11-23 11:02 |只看该作者
原帖由 放驴娃 于 2007-11-23 11:01 发表

真的?

你试试启动100个线程,同时recv,用阻塞方式

建议看看unix网络编程卷1,select的由来~~~

[ 本帖最后由 anthony1983 于 2007-11-23 11:03 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2007-11-23 11:05 |只看该作者
原帖由 anthony1983 于 2007-11-23 11:02 发表

你试试启动100个线程,同时recv,用阻塞方式

建议看看unix网络编程卷1,select的由来~~~

再次请你确认,阻塞方式会导致高 CPU 利用率——真的?

论坛徽章:
0
19 [报告]
发表于 2007-11-23 11:15 |只看该作者
原帖由 anthony1983 于 2007-11-23 10:51 发表

那是阻塞状态下。。。。。。。。。。。。。!
man recv 中的一段话

If no messages are available at the socket, the receive call
     waits  for  a  message  to arrive, unless the socke ...

你又错了,我刚刚测试了,不可能会发生.

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
20 [报告]
发表于 2007-11-23 11:31 |只看该作者
原帖由 anthony1983 于 2007-11-23 10:57 发表
尽量不要用阻塞方式
而是采取select/poll  结合非阻塞方式
因为阻塞方式会导致CPU占用率过高

这句又不对
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP