我参照一本关于socket通信的书籍,写了一个接收数据的接收线程。数据是能接收,但返回值总是不太对,麻烦大家帮忙看一下。我采用的是异步通信方式://设置套接字非阻塞模式
 nResult = ioctlsocket( g_sockListen, FIONBIO, &arg );我客户端每隔一秒发送一串字符串:hello, da jia hao.服务器端接收结果:
nRet = 80, recv: hello, da jia hao.
nRet = 20, recv:
nRet = 80, recv: hello, da jia hao.
nRet = 20, recv:
nRet = 80, recv: hello, da jia hao.
nRet = 20, recv:
nRet = 80, recv: hello, da jia hao.
nRet = 20, recv:
nRet = 80, recv: hello, da jia hao.
nRet = 20, recv:
nRet = 80, recv: hello, da jia hao.下面是接收线程完整代码:DWORD WINAPI CClient::RecvProc( LPVOID pParam )
{
    int nRet = 0;
    int nErrorCode = 0;
    CClient *pClient = (CClient *)pParam;
    
    while( pClient->m_bRuning )
    {
        memset( pClient->m_recvData, 0, sizeof(pClient->m_recvData) );
        nRet = recv( pClient->m_socket, pClient->m_recvData->buffer, sizeof(pClient->m_recvData->buffer), 0 );
        if( SOCKET_ERROR == nRet )
        {
            nErrorCode = WSAGetLastError();
            if( WSAEWOULDBLOCK == nErrorCode )
            {
                Sleep( SLEEP_TIME_READ );
                continue;
            } 
            else if( WSAENETDOWN == nErrorCode || WSAETIMEDOUT == nErrorCode || WSAECONNRESET == nErrorCode )
            {
                if( WSAECONNRESET == nErrorCode )
                {
                    printf( "客户端: %s %d 断开连接.\n\n", inet_ntoa(pClient->m_addr.sin_addr), pClient->m_addr.sin_port );
                }
                else
                    printf( "%s\n", GETERRORINFO("recv") );
                break;
            }
        }
    
        // 客户端关闭了连接
        if( 0 == nRet )
        {
            printf( "客户端: %s %d 断开连接.\n\n", inet_ntoa(pClient->m_addr.sin_addr), pClient->m_addr.sin_port );
            break;
        }        // 收到数据
        if( nRet > 0 )
        {
            pClient->m_recvData->len = nRet;
            printf( "nRet = %d, recv: %s\n", nRet, pClient->m_recvData->buffer );
        }
    }       return 0;
}谢谢!!