我采用CSocket编了一个图象传送的程序,如果客户机和服务器在一个局域网内(或者就是同一台机器),传个几次后接收端就无法再接收了,只能关闭连接后再重新连接后发送.总之不稳定,好象接收方就不再进入OnReceice()函数一样,不知是什么原因?

解决方案 »

  1.   

    代码是在chatter和chatsvr基础上改的,定时1s发一副图片,发送用CArchive.Write();接收用CArchive.Read();加了握手。
      

  2.   

    void CMsg::Serialize(CArchive& ar)
    {
    if (ar.IsStoring())  //发送
    {
    ar << (WORD)m_bClose;  //结束标志
    ar << (WORD)m_wMsgType; //消息类型
    if(m_wMsgType == 0)  //string
    {
    ar << m_strText;
    m_msgList.Serialize(ar);
    }
    else if(m_wMsgType == 1) //二进制文件
    {
    ar << (DWORD)m_dwMsgLen;  //长度

    TRACE("\n Msg Len: %ld",m_dwMsgLen); ar.Write(m_pbMsgContent, m_dwMsgLen);
    }
    }
    else  //接收
    {
    WORD wd;
    ar >> wd;
    m_bClose = (BOOL)wd; //结束标志

    ar >> wd;
    m_wMsgType = wd; //消息类型 if(m_wMsgType == 0)  //string
    {
    ar >> m_strText;
    m_msgList.Serialize(ar);
    }
    else if(m_wMsgType == 1) //二进制文件
    {
    ar >> (DWORD)m_dwMsgLen;  //长度
    m_pbMsgContent =  new BYTE [m_dwMsgLen];
    ar.Read(m_pbMsgContent, m_dwMsgLen); //写文件
    CFile SaveFile;
    SaveFile.Open("d:\\rev.jpg", CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite);
    SaveFile.Write(m_pbMsgContent, m_dwMsgLen);
    SaveFile.Close(); delete m_pbMsgContent;
    } }

    }