代码如下 if(m_clientSocket == NULL)
{
//创建新的对象
m_clientSocket = new CClientSocket(this);
ASSERT(m_clientSocket != NULL);
}
if(!m_clientSocket->Create()) /*此处空着也没事, 计算机自动分配端口*/
{
delete m_clientSocket;
m_clientSocket = NULL;
AfxMessageBox("打开指定端口失败");
return;
}
if(!m_clientSocket->Connect(m_strIP,888))
{
AfxMessageBox("连接服务器失败");
return;
}
//接收从服务器发来的数据, 由系统当有数据发过来时自动调用CSocket的onreceive从而又调用真正的接收数据函数
AfxMessageBox("成功连接到服务器");上面能成功弹出成功连接的对话框, 然后连接上服务器后, 怪事来了……下面代码为一个函数, 此函数供我套接字类中的CSocket::OnReceive(nErrorCode);调用
函数代码如下 pDoc->ReceiveData(); //调用接收函数AfxMessageBox("服务器有数据传送过来!"); //这能弹出此对话框,证明服务器是往这发送东西了
ASSERT(m_clientSocket); //但是在这出错, why? 上面不是已经创建了套接字了吗? 
char Message[256]; //最多接收256个字符
//if(!m_clientSocket)
//{
// AfxMessageBox("套接字失效!不能接收数据"); 
// return;
//}
int len = m_clientSocket->Receive(Message,255,0); //出错了
if(len<1)AfxMessageBox("接收信息异常");
Message[len]=0;
AfxMessageBox(Message);
//m_strRecMessage = Message;
//m_pView->m_strRecMessage = m_strRecMessage;
//m_pView->Invalidate(FALSE); //引起重画说明, 我继承了CSocket类,m_clientSocket的声明为CMySocket* m_clientSocket

解决方案 »

  1.   

    补充 m_clientSocket 都是Doc类中的成员,成就是说不存在创建跟使用不同一指针的问题 CClientSocket* m_clientSocket , 上面是为了简单, 所以说是CMySocket* 呵呵
      

  2.   

    如果是这样的话,是不是应该是ASSERT(pDoc->m_clientSocket),除了类不同外,就是有其它地方改了m_clientSocket了,我想没其它的可能了呀!
      

  3.   

    问题已经解决, 呵呵就应该在CClientSocket类中传一指针过来
    void CClientSocket::OnReceive(int nErrorCode) 
    {
    // TODO: Add your specialized code here and/or call the base class

    CSocket::OnReceive(nErrorCode);
    pDoc->ReceiveData(this); //调用接收函数  注意, 这是出了问题的地方
    } void CMClientDoc::ReceiveData(CClientSocket *socket)这样就能传送数据了, 呵呵, 谢谢关注问题已经解决