服务器和客户端已经都连好了。服务器向客户发只一次数据,然后服务器就先停那儿呆着。
客户端我把recv放在一个循环里,并且在recv的后面紧跟着一些命令用来显示所收到数据。调试的时候发现,recv在接完一次数据之后,下次再循环到它的时候,服务器都不发数据了,客户端的recv并没有堵在那儿,居然还可以继续走下面那些显示数据的语句,于是我用来接收数据的buf虽然一直都是一堆-52啥也没接着,但一直不断地显示着“烫”,一片烫……按理说,如果服务器那头不发数据,我客户这边应该一直停在recv上不动的吧,为啥它还能继续向下走呢……
我刚刚还设了一个变量来检测一下,recv在后面的循环中返回0,它确实没有收到数据,但没有堵着,而是往下执行。

解决方案 »

  1.   

    我开始做的时候也出现一片烫
    那时候是因为我send那端没开
    建议你看看send那边
    我猜那边出问题了
      

  2.   

    以下是我在客户端的用来等待服务器数据到来的线程:
    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那儿啊!
      

  3.   

    接收和发送的长度,一定设置一样!
    send(**,200,***),recv(**,200,***);