首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2012-09-09 
客户端没有数据时,recv出问题客户端没有发数据时,recv出问题了。 CAysncSocket写的。最后一个问题了,就彻底

客户端没有数据时,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的时候,参数是一个临时变量指针,这用法明显有很大的问题。

热点排行