ysm 发表于 2014-5-28 21:38:27

socket阻塞问题...

在mfc中客户端按下指定按钮时利用socket一直接收数据,具体代码如下:
void CdaimaDlg::OnBnClickedButton8()
{
      // TODO: 在此添加控件通知处理程序代码
      charrecvBuffer={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函数这,请问用什么方法能使客户端没有接收到数据时可以去干别的事...

nongfun 发表于 2014-5-28 21:38:28

你应该声明你的sockClient为无阻塞的,然后用select函数来对sockClient句柄的控制,
它可以帮助你得到sockClient的I/O是否准备,有读的时候就读,有写的时候再写!
你可以在网上搜索 无阻塞socket的实现!
用线程,需要你对代码有一定的组织能力,你的问题不用线程也可以解决!

向往青莲 发表于 2014-5-28 21:57:50

多线程。。。

ysm 发表于 2014-5-29 09:29:04

向往青莲 发表于 2014-5-28 21:57 static/image/common/back.gif
多线程。。。

具体怎么实现...?

向往青莲 发表于 2014-5-29 12:12:49

用一个线程专门做这个。。。其他线程就可以做其他的事了。。

zhang206zyx 发表于 2014-5-30 14:42:03

非阻塞的SOCKET
轮询
WaitForSingleEvent
WaitForMultiEvent
......

ravenhu13 发表于 2014-5-30 20:53:41

如果按照你的程序框架来设计的话,不可能,无论是否返回,都会一直在循环里面。
如果改掉你的框架的话就可以,还要把recv弄成异步的。
页: [1]
查看完整版本: socket阻塞问题...