免费注册 查看新帖 |

Chinaunix

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

请教一个关于接收网络数据的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-13 09:50 |只看该作者 |倒序浏览
发送方先发一个字节,再发几个字节,在windows上用CSocket的OnRecieve虚函数可以一次接收这两次发

送的数据,在linux上则有时要调用两次recv,请问linux下有没有提供象windows的消息机制来实现异步

I/O?

谢谢!

论坛徽章:
0
2 [报告]
发表于 2006-07-13 10:33 |只看该作者
没有用过windows下的socket
不过考虑一个极端的情况,发送方在第一次发送了一个字节后,隔一天再发送第二批数据
windows下的OnRecieve虚函数也可以一次接收????

个人觉得数据是一次接收完还是分几次接收完和操作系统没有关系,而是跟当时的网络负载有关系

请高手指点

论坛徽章:
0
3 [报告]
发表于 2006-07-16 11:28 |只看该作者
这两个包是顺序发出的中间有一小段代码。我是在局域网上做的,相同的条件下,使用windows的消息机制一次可以收两包数据,在linux如果设置延时也可以收两包数据,但直接用recv就只能收到第一个包数据。想知道linux下有没有类似windows的发生网络事件用消息通知的机制,是不是用信号?谢谢

论坛徽章:
0
4 [报告]
发表于 2006-07-16 11:49 |只看该作者
CSocket封装了一个不可见窗口,利用窗口的消息机制来实现事件通知,这种封装不是windows的内容,是MFC类库的内容,标准c++没有这种类似封装,不过有些类库实现了相似的功能,如wxWidgets。一次收多少数据包根本不用理会,没有意义。

论坛徽章:
0
5 [报告]
发表于 2006-07-16 12:33 |只看该作者
MFC封装的是windows API WSAAsyncSelect。请问linux的底层用哪个API能实现类似功能?

论坛徽章:
0
6 [报告]
发表于 2006-07-16 12:37 |只看该作者
即使只在windows下也别用vc的类,都用函数各写一个连接,几乎都一样.windows下多了个ws..?那么一个声明 用closesocket关句柄 其他都一样

论坛徽章:
0
7 [报告]
发表于 2006-07-17 07:00 |只看该作者
搞了几天了,也没有找到解决方案,要疯了,高人指点一下吧

论坛徽章:
0
8 [报告]
发表于 2006-07-17 08:28 |只看该作者
没看出来哪里有问题了,linux下面有select和epoll等机制通知你数据来啦。

论坛徽章:
0
9 [报告]
发表于 2006-07-17 10:50 |只看该作者
原帖由 sillydog825 于 2006-7-13 09:50 发表
发送方先发一个字节,再发几个字节,在windows上用CSocket的OnRecieve虚函数可以一次接收这两次发

送的数据,在linux上则有时要调用两次recv,请问linux下有没有提供象windows的消息机制来实现异步

I/O?
...


流式套接字,一次收还是两次收有区别吗???????

如果你的程序不能兼容多次收到的话,你的程序就是错误的。

论坛徽章:
0
10 [报告]
发表于 2006-07-18 11:26 |只看该作者
现在找到一个用信号的方案来获得数据到达的通知,就是先挂上信号处理程序,再将socket设非阻塞方式,然后在信号处理程序中接收数据。可是发送较大量数据的时候,信号好象会丢失,数据实际止都到了,但给的信号不够,导致最后数据收不完全,唉。。。
用select 和poll都是一种被动的方式,那样根本无法区别是对方不发数据了还是连接异常断开这种情况,最郁闷的是超时不好设置

[ 本帖最后由 sillydog825 于 2006-7-18 11:28 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP