鱼C论坛

 找回密码
 立即注册
查看: 2647|回复: 6

socket阻塞问题...

[复制链接]
发表于 2014-5-28 21:38:27 | 显示全部楼层 |阅读模式
3鱼币
在mfc中客户端按下指定按钮时利用socket一直接收数据,具体代码如下:
void CdaimaDlg::OnBnClickedButton8()
{
        // TODO: 在此添加控件通知处理程序代码
        char  recvBuffer[100]={0};//接收缓冲区

         FILE *fp;
         fp=fopen("D:\\2.txt","ab");
        while(1)
        {           
                 recvLen=recv(sockClient,recvBuffer,100,0);
                 fwrite(recvBuffer,1,recvLen,fp);
                 fseek(fp,0,SEEK_END);
                 ZeroMemory(recvBuffer,recvLen);        
        }
但当服务端停止发送数据或间断发送数据时,客户端会一直卡在recv函数这,请问用什么方法能使客户端没有接收到数据时可以去干别的事...

最佳答案

查看完整内容

你应该声明你的sockClient为无阻塞的,然后用select函数来对sockClient句柄的控制, 它可以帮助你得到sockClient的I/O是否准备,有读的时候就读,有写的时候再写! 你可以在网上搜索 无阻塞socket的实现! 用线程,需要你对代码有一定的组织能力,你的问题不用线程也可以解决!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-28 21:38:28 | 显示全部楼层
你应该声明你的sockClient为无阻塞的,然后用select函数来对sockClient句柄的控制,
它可以帮助你得到sockClient的I/O是否准备,有读的时候就读,有写的时候再写!
你可以在网上搜索 无阻塞socket的实现!
用线程,需要你对代码有一定的组织能力,你的问题不用线程也可以解决!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-28 21:57:50 | 显示全部楼层
多线程。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-5-29 09:29:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-29 12:12:49 | 显示全部楼层
用一个线程专门做这个。。。其他线程就可以做其他的事了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-30 14:42:03 | 显示全部楼层
非阻塞的SOCKET
轮询
WaitForSingleEvent
WaitForMultiEvent
......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-30 20:53:41 | 显示全部楼层
如果按照你的程序框架来设计的话,不可能,无论是否返回,都会一直在循环里面。
如果改掉你的框架的话就可以,还要把recv弄成异步的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 11:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表