免费注册 查看新帖 |

Chinaunix

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

[函数] 请教一个TCP SOCKET的简单问题。各种牛请进! [复制链接]

论坛徽章:
1
2015年亚洲杯之巴林
日期:2015-02-05 20:34:47
11 [报告]
发表于 2013-03-25 22:29 |只看该作者
回复 10# tansijie


    但是用 EPOLL 的 ET模式必须一次读完,只读一部分的话,下一次 epoll_wait不会得到通知的。关键还不是这个,关键是我说的那个,只读了一半数据怎么办?

论坛徽章:
0
12 [报告]
发表于 2013-03-26 09:12 |只看该作者
自定义格式:比如发送时发个“Send:A数据长度:数据,B数据长度:数据",接收端每次接受数据检查边界

论坛徽章:
1
2015年亚洲杯之巴林
日期:2015-02-05 20:34:47
13 [报告]
发表于 2013-03-26 09:19 |只看该作者
hededisanan00 发表于 2013-03-26 09:12
自定义格式:比如发送时发个“Send:A数据长度:数据,B数据长度:数据",接收端每次接受数据检查边界


基本上是这样处理,不过接收函数里面接收的buffer要能动态增长,所以搞得比较麻烦。

论坛徽章:
0
14 [报告]
发表于 2013-03-26 17:51 |只看该作者
回复 11# sublx
边缘触发方式的确如果一次性未读完,后续的不再通知了,解决这种问题的办法是,接受的时候,while循环读,多读几次,直到读完,等下次有新的数据的时候epoll会通知你。


   

论坛徽章:
1
2015年亚洲杯之巴林
日期:2015-02-05 20:34:47
15 [报告]
发表于 2013-03-26 22:00 |只看该作者
回复 14# tansijie


    这些都知道,现在的问题是,当你去读数据的时候,你的接受缓冲比socket的接收缓冲小的时候的处理方案。

论坛徽章:
0
16 [报告]
发表于 2013-03-26 22:33 |只看该作者
回复 15# sublx
不是说了么, 当一个epoll 读事件发生了。 你用do while 读数据,直到这个缓冲区数据读完, 你要是实在不知道读多少数据,那么你使用getsockopt 函数获取当前接收缓冲区有多少数据,然后将这部分数据读完,我也是写客户端与服务端交互这种程序,你说的这种情况太常见了。 et模式收到数据了,循环读,将缓冲区读完,然后大的循环再去查epoll 有没有读的事件发生。

   

论坛徽章:
0
17 [报告]
发表于 2013-03-29 16:29 |只看该作者
晕,3楼不是说的很清楚了么。tcp是流模式的,所以要自己去解析包。定义消息格式,一般用msg len+msg body
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP