服务器和客户端已经都连好了。服务器向客户发只一次数据,然后服务器就先停那儿呆着。
客户端我把recv放在一个循环里,并且在recv的后面紧跟着一些命令用来显示所收到数据。调试的时候发现,recv在接完一次数据之后,下次再循环到它的时候,服务器都不发数据了,客户端的recv并没有堵在那儿,居然还可以继续走下面那些显示数据的语句,于是我用来接收数据的buf虽然一直都是一堆-52啥也没接着,但一直不断地显示着“烫”,一片烫……按理说,如果服务器那头不发数据,我客户这边应该一直停在recv上不动的吧,为啥它还能继续向下走呢……
我刚刚还设了一个变量来检测一下,recv在后面的循环中返回0,它确实没有收到数据,但没有堵着,而是往下执行。
客户端我把recv放在一个循环里,并且在recv的后面紧跟着一些命令用来显示所收到数据。调试的时候发现,recv在接完一次数据之后,下次再循环到它的时候,服务器都不发数据了,客户端的recv并没有堵在那儿,居然还可以继续走下面那些显示数据的语句,于是我用来接收数据的buf虽然一直都是一堆-52啥也没接着,但一直不断地显示着“烫”,一片烫……按理说,如果服务器那头不发数据,我客户这边应该一直停在recv上不动的吧,为啥它还能继续向下走呢……
我刚刚还设了一个变量来检测一下,recv在后面的循环中返回0,它确实没有收到数据,但没有堵着,而是往下执行。
那时候是因为我send那端没开
建议你看看send那边
我猜那边出问题了
UINT _ListenTcpThread(LPVOID lparam)
{ //RECVPARAM是个结构体,用来保留套接字和窗口指针的
RECVPARAM *plRecvParam=new RECVPARAM;
plRecvParam->hSock=((RECVPARAM*)lparam)->hSock;//套接字在启动线程前就connect好了
plRecvParam->pDlg=((RECVPARAM*)lparam)->pDlg; CcmptDlg *pDlg=plRecvParam->pDlg;
if(pDlg->StopServer==true) return -1; SOCKET sockClient_T;
sockClient_T=plRecvParam->hSock;//把套接字传进来了
char recvBuf[100];//用于接收数据 int recvScan;
recvScan=recv(sockClient_T,recvBuf,100,0);
pDlg->OnForScan(recvBuf);break;//用于处理接来的数据的 pThreadListen=::AfxBeginThread(_ListenTcpThread,(LPVOID)plRecvParam,0,0,0,0);
//在这儿重新把线程启动起来,以达到循环的目的
return 0;
}
现在的问题就是,服务器那儿只发一次数据就不发了,可recv那儿一直都在不停地接啊接,我都判断了,recv都已经为0了,后面处理数据的语句一直都一遍又一遍地执行着。按理说应该堵在recv那儿啊!
send(**,200,***),recv(**,200,***);