csocket服务器发送消息给客服端时,如果客服端提前异常结束,服务端程序会死,怎么解决啊?心跳包如果设置为10秒,那也不能保证在10秒内客服端没有异常结束。最主要服务端会报错结束
报错内容:
0x5417521指令引用0xdddddddddf1内存.该内存不能为read

解决方案 »

  1.   

    void CSessionSocket::SendMsg(CMsg *pMsg)
    {
    if (m_pArchiveOut != NULL)
    {
    TRY 
    {
    pMsg->Serialize(*m_pArchiveOut);//如果远程程序意外死亡。就在这句报错。请问怎么解决?
    m_pArchiveOut->Flush();
    }
    CATCH (CMemoryException, e)//(CFileException, e)
    {
    m_pArchiveOut->Abort();
    delete m_pArchiveOut;
    m_pArchiveOut = NULL;
    }
    END_CATCH
    }
    else
    {
    //对方关闭了连接
    AfxMessageBox("对方关闭了连接");
    }
    }
      

  2.   

    是不是哪里将pMsg删除了?
    这个问题是指针管理的问题,与网络无关。
      

  3.   

    远程电脑用任务管理器关闭程序,本地电脑CSocket类重载OnClose函数,可以捕获关闭消息。然后删除这个socket,更新界面就可以了。感觉是远程的CArchive没有了导致报错。至于怎么解决或者说万一别人是断网了就没有OnClose消息那又怎么办就不知道了。_AFX_INLINE BOOL CArchive::IsStoring() const 
    { return (m_nMode & CArchive::load) == 0; } 
    最后报错的地点。