CClientSocket是从CSocket继承的类:void CClientSocket::InitClientSocket()
{
m_pSocketFile =new CSocketFile(this);  // 这句出错
m_pArchiveIn = new CArchive(m_pSocketFile, CArchive::load);  
m_pArchiveOut = new CArchive(m_pSocketFile, CArchive::store); 
}进定步跟踪发现:
CSocketFile::CSocketFile(CSocket* pSocket, BOOL bArchiveCompatible)
{
m_pSocket = pSocket;
m_bArchiveCompatible = bArchiveCompatible;#ifdef _DEBUG
ASSERT(m_pSocket != NULL);
ASSERT(m_pSocket->m_hSocket != INVALID_SOCKET);   //这个断言失败,会是什么原因? int nType = 0;
int nTypeLen = sizeof(int);
ASSERT(m_pSocket->GetSockOpt(SO_TYPE,&nType,&nTypeLen));
ASSERT(nType == SOCK_STREAM);
#endif // _DEBUG if (pSocket == NULL)
{
AfxThrowInvalidArgException();
}
}
________________________________
以下是我在CDoc中对CClientSocket的引用:
BOOL CLanClientDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE; // TODO: 在此添加重新初始化代码
// (SDI 文档将重用该文档) CClientSocket s;
s.InitClientSocket(); return TRUE;
}

解决方案 »

  1.   

    CClientSocket s;
    s.Create(...);
    s.InitClientSocket();
      

  2.   

    to Mapleinhg:
    我是第一次创建。to  DentistryDoctor:
    可是我在服务器端也没有Create(...),没有问题啊(同一个类),如下:void CLanManagerDoc::ProcessPendingAccept()   // 处理客户端的连接
    {
    CClientSocket *pClientSocket = new CClientSocket(this);
    ASSERT(pClientSocket); if(m_pListenSocket->Accept(*pClientSocket) != 0)
    {
    pClientSocket->InitClientSocket();
    m_connSocketList.AddTail(pClientSocket);
    }
    else
    {
    delete pClientSocket;
    }}