我有一处不明:
ar << (WORD)m_bClose;
不就关闭连接了吗?

解决方案 »

  1.   

    既然是在那里出错,是不是你的CArchiev没有和CSocket连接上呢?
      

  2.   

    老大,别用csocket啊,他是同步的,程序不好控制,可以说没什么使用价值,用它的基类好一点:)
      

  3.   

    1。ar << (WORD)m_bClose;是一个标志,当接收端发现这个标志变为FALSE时就自动断开链接。
    2。我的CArchiev和CSocket在初始化CArchiev和CSocket时是连接上的,那时也可以传输数据,但在后面调用CArchiev时就不成了。
    3。WinSock我也是刚刚使用,对一些概念也不熟,希望各位能够提供可以直接应用的原码。
      

  4.   

    讨论讨论吧。我在写WinSock程序,不过我用的是API,对你用的类不了解。
    你可以直接使用CSocket的send发送,如果失败,说明连接已经关闭。
    你还可以跟踪服务端,看连接是否关闭。
      

  5.   

     to jiujiejushi:
     ”你还可以跟踪服务端,看连接是否关闭“,如何跟踪,可以说具体点儿吗?。
      

  6.   

    在你SendMeg时,你的m_pFile文件指针已出了作用范围,检查一下你文件指什的作用区域。
    ASSERT_VALID(m_pFile);指的是m_pFile为NULL值。
      

  7.   

    我想可能问题是出在m_pArchiveOut变量(CAchive类)上,而m_pFile变量是CAchive类的一个私有变量,由于这个变量的m_pFile出了作用范围,但我没有搞清楚,为什么这个变量超出作用范围,而m_pArchiveOut又没有问题。
      

  8.   

    应该是你的Socket句柄被关闭了
      

  9.   

    又发现了一个新问题:我在SendMsg()函数中,一旦执行delete m_pArchiveIn;系统都会报错,但m_pArchiveIn并不是空的。
    附:m_pArchiveIn产生    m_pSocket = new CCliSocket(); if (!m_pSocket->Create())
    {
    delete m_pSocket;
    m_pSocket = NULL;
    AfxMessageBox(IDS_CREATEFAILED);
    return FALSE;
    } while (!m_pSocket->Connect(lpszAddress, nPort + 700))
    {
    delete m_pSocket;
    m_pSocket = NULL;
    return FALSE;
    } m_pFile = new CSocketFile(m_pSocket);
    m_pArchiveIn = new CArchive(m_pFile,CArchive::load);
    m_pArchiveOut = new CArchive(m_pFile,CArchive::store);
      

  10.   

    我又测试了一下,发现如果将建立Socket部分及SendMsg部分函数放到CDocument类中,就可以实现发送(msdn中的例子就是这样),非常奇怪?有没有高手知道这个问题?