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函数这,请问用什么方法能使客户端没有接收到数据时可以去干别的事...
你应该声明你的sockClient为无阻塞的,然后用select函数来对sockClient句柄的控制,
它可以帮助你得到sockClient的I/O是否准备,有读的时候就读,有写的时候再写!
你可以在网上搜索 无阻塞socket的实现!
用线程,需要你对代码有一定的组织能力,你的问题不用线程也可以解决! 多线程。。。 向往青莲 发表于 2014-5-28 21:57 static/image/common/back.gif
多线程。。。
具体怎么实现...? 用一个线程专门做这个。。。其他线程就可以做其他的事了。。 非阻塞的SOCKET
轮询
WaitForSingleEvent
WaitForMultiEvent
...... 如果按照你的程序框架来设计的话,不可能,无论是否返回,都会一直在循环里面。
如果改掉你的框架的话就可以,还要把recv弄成异步的。
页:
[1]