客户端没有数据时,recv出有关问题

客户端没有数据时,recv出问题

客户端没有发数据时,recv出问题了。 CAysncSocket写的。

最后一个问题了,就彻底解决了

大神帮忙解答。



C/C++ code


unsigned int CMyServerDlg::ReceiveUserPacke(void*)
{
    while(1)
    {
        if(WaitForSingleObject(pThis->hKillReceiveEvent,0)==WAIT_OBJECT_0)
            return 0;
        

        {
            CMutexHelper mtHelp(&mu);
            if(pThis->m_pCurSock==NULL)
            {

                continue;
            }
        }

        char rcvBuf[1000];
        memset(rcvBuf,sizeof(rcvBuf),0);

//这一句出错。
        if(SOCKET_ERROR!=pThis->m_pCurSock->Receive(rcvBuf,sizeof(rcvBuf)))
        {
            //解析
            CPacket* pPack=(CPacket*)rcvBuf;
            if(pPack->type==CPacket::HeartBeat)        // 心跳包
            {
                

            }

            else if(pPack->type==CPacket::Verification)        //验证
            {
                

            }
            else if(pPack->type==CPacket::Msg)        //消息
            {
            
            }
        }
    }

    return 0;
}






------解决方案--------------------
“有时候客户端停了, 几分钟,也进步了这个if语句。”
这是对的啊,
 std::map<std::string,COnLineUser*>::iterator iter=pThis->on_line_userMap.begin(); while(iter!=pThis->on_line_userMap.end())
{
}
这里超时,当时进if了。处理完后,从map 里删掉,下次就不进来了。“不要直接删去socket”,为什么不能删呢?客户端都停止了,close之后,这个socket已经没用了。
------解决方案--------------------
你在判断超时的时候,对于没有超时的客户端,为什么要更新其theLastTalkTime?
你postmessage的时候,参数是一个临时变量指针,这用法明显有很大的问题。