本帖最后由 VisualEleven 于 2010-12-07 17:28:29 编辑

解决方案 »

  1.   

    问题在于 packet.Serialize(*m_pArchiveIn);
    你只收了一个包就结束了处理,系统缓存里还有其他数据没有处理。这样OnRecv以后就得不到通知啦。
    所以,怎么解决你自己想把。
      

  2.   

    void CChatDlg::ProcessPendingRead(void)
    {
    do
    {
    ReadPacket();
    }
    while(!m_pArchiveIn->IsBufferEmpty());
    }
    确保系统缓存里数据全部读完
      

  3.   

    m_pArchiveIn->IsBufferEmpty()只是表示m_pArchiveIn缓存里面的数据是不是空的,就算是空的还可以从socketfile里面取的。你这个循环的读法,OnReciev很难再次被触发。csocektfile适合这种用法
    http://hi.baidu.com/fjcy/blog/item/a9c6d72a3569b024d42af11d.html你那个方式你要好好研究下mfc源码,然后再改你的代码。
      

  4.   

    所以说不是4楼说的问题
    我是参照 孙海民写的《精通Windows Sockets网络开发-基于Visual C++实现》
    第七章简易聊天程序写的代码,发现它也会出现两用户互发信息,一方数据接收不到问题
    哪位高手能帮帮我,是哪里出问题了,怎么才能解决?
    小弟愿将所有的分给他,这问题困扰我好久了。。
      

  5.   

    是OnRecewive在前,然后再到ProcessPendingRead
    OnReciev很难再次被触发?
    你的意思是把do while换成while?
      

  6.   

    SendPacket没有捕获到异常,应该发送成功了
      

  7.   


    不是,我是说你循环的读包,样子就像你一直在OnRecv函数中没有退出一样。
      

  8.   

    我也遇到一模一样的问题,我发现在VC6下没问题,在VS2005就出问题了(收不到数据)。请问为什么?