vc下用socket api来做client,connect上server后,单独开一个线程recv(Sleep(time)或用select)。
现在的问题是,如果我在其他地方掉用了一个send(比如一个按钮事件),那么除非调用send的函数返回(应该说是可能调用send的最原始的函数,因为往往要经过若干调用才会调用使用send的函数),接收进程的recv才能返回,实际这时候server早就已经返回数据回来了(调试可以看到)。我怎么才能在send函数返回前,也就是说只要server一返回数据,recv就可以返回而不用等send函数结束?
我认为是进程独占socket句柄造成的,我用非阻塞方式也不行,那么应该怎么做呢?另外就是socket句柄我用的是全局变量。
现在的问题是,如果我在其他地方掉用了一个send(比如一个按钮事件),那么除非调用send的函数返回(应该说是可能调用send的最原始的函数,因为往往要经过若干调用才会调用使用send的函数),接收进程的recv才能返回,实际这时候server早就已经返回数据回来了(调试可以看到)。我怎么才能在send函数返回前,也就是说只要server一返回数据,recv就可以返回而不用等send函数结束?
我认为是进程独占socket句柄造成的,我用非阻塞方式也不行,那么应该怎么做呢?另外就是socket句柄我用的是全局变量。
解决方案 »
- 求救!!CListView对WM_LBUTTONUP消息不响应,求解释
- mfc支持什么格式的音乐
- VS2005编译的问题
- 正则表达式问题
- 急,CJ60lib如何使用??
- 哪位达人有COM方面电子书下载的地址啊?如果保证能下我的分全给他!
- 问:如何设计右键菜单
- SetWindowPos 设置子控件位置
- 请教大侠CDaoRecordset::FindNext("PublishDate=")怎样查找日期在指定年份的记录???????
- 请教为什么CRecordSet的对象中用GetRecordCount()方法得到的值为空(明明CRecordSet对象中是有值的)
- 多线程出错!!!
- 请问QQ是如何感应 把文件拖动到编辑框这个消息的
socket是全双工的send和recv不会相互影响
而发数据是需要一些触发的,比如按钮,菜单等,不是一直发送的,这样的话,收和发本来就不在一起的啊?我也知道socket是全双工的,但是怎么我这样做就不行呢?
应该怎么弄呢?