社区
网络编程
帖子详情
socket 发送端采用阻塞方式,接收端用非阻塞方式?
chmdcr
2011-04-01 11:53:40
写一个对数据发送和接收的程序
发送端用阻塞方式发送数据
接收端用非阻塞方式
发送周期比较大 5秒左右
现在的问题是
在数据传输一段时间后 接收端的OnRecive函数突然就接不到通知了 不知道为什么 添加了输出显示 上一次接收肯定已经把发送出来的所有字节都收到了(因为包头包尾都对上了才能进行下面的流程)
这样的话 已发送发送几次数据而接收端不接收的话 那么发送端就阻塞了
为什么OnRecive偶尔会无法收到通知呢??
...全文
384
25
打赏
收藏
socket 发送端采用阻塞方式,接收端用非阻塞方式?
写一个对数据发送和接收的程序 发送端用阻塞方式发送数据 接收端用非阻塞方式 发送周期比较大 5秒左右 现在的问题是 在数据传输一段时间后 接收端的OnRecive函数突然就接不到通知了 不知道为什么 添加了输出显示 上一次接收肯定已经把发送出来的所有字节都收到了(因为包头包尾都对上了才能进行下面的流程) 这样的话 已发送发送几次数据而接收端不接收的话 那么发送端就阻塞了 为什么OnRecive偶尔会无法收到通知呢??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
三重罗生门
2011-04-15
打赏
举报
回复
CAsyncSocket本来就是一个异步I/O模型
CppCoder
2011-04-14
打赏
举报
回复
个人认为
还是表依赖CAsyncSocket的消息循环了,自己Asyncselect分发事件好些
仅供参考
theflyfish
2011-04-14
打赏
举报
回复
[Quote=引用 22 楼 chmdcr 的回复:]
把你的问题整理一下完整的描述吧 越看越晕 我都不知道你的问题是不是和我是一个问题
[/Quote]
很简单,就说说你的问题怎么解决的吧,具体实现,
chmdcr
2011-04-14
打赏
举报
回复
把你的问题整理一下完整的描述吧 越看越晕 我都不知道你的问题是不是和我是一个问题
chmdcr
2011-04-13
打赏
举报
回复
[Quote=引用 16 楼 theflyfish 的回复:]
我也碰到过这样的问题。。。楼主问题解决了没,求解释
[/Quote]
我原来认为CAsyncSocket应该默认的就是异步的 所以没必要再掉Asyncselect
但尝试着又加了一次Asyncselect 就没再出错过
目前看来就算是解决了 但是想不明白 等高手解答
theflyfish
2011-04-13
打赏
举报
回复
theflyfish
2011-04-13
打赏
举报
回复
[Quote=引用 19 楼 chmdcr 的回复:]
引用 18 楼 theflyfish 的回复:
Asyncselect是在ONReceive里面加的,还是在其他地方加的?是Asyncselect(FD_READ)?
我也碰到了这个郁闷的问题,本来想在ONReceive()加一个无限FOR()循环,把recv函数放在循环里,但看来还是不能解决问题,楼主详细说一下吧,菜鸟谢过了
哎。。。。。我这是提问的帖子还是 回答的帖子啊?
你为什……
[/Quote]
楼主好人,说一下你的思路吧,要不我开个贴,你来回答好不,
chmdcr
2011-04-13
打赏
举报
回复
[Quote=引用 18 楼 theflyfish 的回复:]
Asyncselect是在ONReceive里面加的,还是在其他地方加的?是Asyncselect(FD_READ)?
我也碰到了这个郁闷的问题,本来想在ONReceive()加一个无限FOR()循环,把recv函数放在循环里,但看来还是不能解决问题,楼主详细说一下吧,菜鸟谢过了[/Quote]
哎。。。。。我这是提问的帖子还是 回答的帖子啊?
你为什么要用无限FOR循环?
如果用无限FOR循环就另开一个线程 不要放在ONRECEIVE里
theflyfish
2011-04-13
打赏
举报
回复
[Quote=引用 17 楼 chmdcr 的回复:]
引用 16 楼 theflyfish 的回复:
我也碰到过这样的问题。。。楼主问题解决了没,求解释
我原来认为CAsyncSocket应该默认的就是异步的 所以没必要再掉Asyncselect
但尝试着又加了一次Asyncselect 就没再出错过
目前看来就算是解决了 但是想不明白 等高手解答
[/Quote]
Asyncselect是在ONReceive里面加的,还是在其他地方加的?是Asyncselect(FD_READ)?
我也碰到了这个郁闷的问题,本来想在ONReceive()加一个无限FOR()循环,把recv函数放在循环里,但看来还是不能解决问题,楼主详细说一下吧,菜鸟谢过了
至善者善之敌
2011-04-11
打赏
举报
回复
发送端非阻塞,接受也是非阻塞
chmdcr
2011-04-11
打赏
举报
回复
没有人答复了?
theflyfish
2011-04-11
打赏
举报
回复
我也碰到过这样的问题。。。楼主问题解决了没,求解释
chmdcr
2011-04-06
打赏
举报
回复
在接收端加了个Asyncselect 已经跑了3天了 居然没断过 神奇了
chmdcr
2011-04-02
打赏
举报
回复
[Quote=引用 7 楼 wuliaoxuebiancheng 的回复:]
引用 3 楼 chmdcr 的回复:
引用 2 楼 xianglitian 的回复:
你用的是CSocket?
具体怎么实现的
接收端用CAsyncSocket 发送端直接用socket api
接收端应用层收不到数据,发送端也不会阻塞的吧,接收端也用api算了,简单易懂
[/Quote]
要是我写的程序 我早换了
chmdcr
2011-04-02
打赏
举报
回复
TCP的
输出的结果看
就是因为接收端突然收不到ONRECEIVE通知了 然后不在读取缓冲区的数据
而在这之后 发送端再发送几次数据后估计缓冲区满了 他就阻塞在send函数那里不动了
一直有判断send的返回值 肯定是想要发的都发出去了
我 尝试人为的暂停接收端 发送端确实会在发送几次后就阻塞在send函数那里 当我恢复接收端继续接收数据后 发送端会恢复正常执行
现在问题目前就定在为什么接收端会突然的就收不到ONReceive的通知了呢 CAsyncSocket应该默认的就是异步的 所以没必要再掉Asyncselect吧 退一步讲 如果是因为这个问题 程序也不可能执行这么长时间 应该很快就出问题的
Eleven
2011-04-02
打赏
举报
回复
你要先确定是你发送端还是接收端的问题,抓个包看看数据有没有发送出去,或者数据有没有到达接收端?
向立天
2011-04-02
打赏
举报
回复
[Quote=引用 7 楼 wuliaoxuebiancheng 的回复:]
引用 3 楼 chmdcr 的回复:
引用 2 楼 xianglitian 的回复:
你用的是CSocket?
具体怎么实现的
接收端用CAsyncSocket 发送端直接用socket api
接收端应用层收不到数据,发送端也不会阻塞的吧,接收端也用api算了,简单易懂
[/Quote]
对呀
不会发生所谓发送阻塞的问题吧
你先做个简单模型看看会不会出问题
然后再一点点的加大复杂度
或者通过一种方式看看发送端会不会有其他问题
向立天
2011-04-01
打赏
举报
回复
你用的是CSocket?
具体怎么实现的
smwhotjay
2011-04-01
打赏
举报
回复
话说,你还没理解socket. 再仔细看
西湖秀才
2011-04-01
打赏
举报
回复
[Quote=引用 3 楼 chmdcr 的回复:]
引用 2 楼 xianglitian 的回复:
你用的是CSocket?
具体怎么实现的
接收端用CAsyncSocket 发送端直接用socket api
[/Quote]
接收端应用层收不到数据,发送端也不会阻塞的吧,接收端也用api算了,简单易懂
加载更多回复(4)
非
阻塞
socket
实现android手机与PC的文件传输
android手机
端
发送
一个“filename”字符串到PC,PC验证字符后返回要传输文件的文件名,然后手机
端
再把接收到的文件名
发送
给PC
端
,进行校验,如果PC
端
校验成功,那么PC
端
就开始传输这个文件给手机
端
,手机
端
就接收这...
java解读NIO
Socket
非
阻塞
模式.zip
jdk供的无
阻塞
I/O(NIO)有效解决了多线程服务器存在的线程开销问题,但在使用上略显得复杂一些。在NIO中使用多线程,主要目的已不是为了应对每个客户
端
请求而分配独立的服务...
非
阻塞
的NIO有何神秘之处?直接上代码!
Python网络编程(
socket
)
答案就是
socket
.
socket
翻译为套接字,它本质就是在应用层和传输层(TCP/IP协议族通信)之间的一个抽象层,是一组接口,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。该课程包括OS...
MFC网络编程之自制浏览器
目的是让初学者不仅对
Socket
异步
非
阻塞
的概念有个非常透彻的理解,而且也给他们提供一个用
Socket
开发网络通信应用程序的快速入门方法。操作系统是Windows 98(或NT4.0),开发工具是Visual C++6.0。 MFC提供了一个...
Socket
Can中接收和
发送
默认的
阻塞
和
非
阻塞
类型说明
接收(读取)操作:默认情况下,当你使用
Socket
CAN套接字进行数据接收(例如,使用read函数),如果没有数据可用,读取操作将会
阻塞
,直到有数据到达为止。这是为了确保接收到来自CAN总线的实时数据。总之,在
Socket
...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章