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;
}
{
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;
}
s.Create(...);
s.InitClientSocket();
我是第一次创建。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;
}}