我要做一个聊天程序,服务器端有两个类分别用于聊天和侦听,基类都是CSocket,客户端有一个聊天类,基类为CSocket,服务器端启动后,
pListeningSocket = new CListeningSocket(this);
bReturn=pListeningSocket->Create(1978);
if(bReturn==0) ::MessageBox(NULL,"打开 1978 聊天端口失败!","错误",0);
bReturn=pListeningSocket->Listen();
if(bReturn==0)    ::MessageBox(NULL,"执行聊天侦听出错","错误",0);都没有问题,只是在接受客户请求时出错:
CChat* chatsocket=new CChat(this);
if(!pListeningSocket->Accept(*chatsocket)) /****  在这里出错  ***/
{
    CString msg;
    msg.Format("Accepted client failed!Error code is %d",GetLastError());
    AfxMessageBox(msg);
    delete chatsocket;
}
各位看看是哪里出了问题?

解决方案 »

  1.   

    你是在void CListenSocket::OnAccept(int nErrorCode) {}里面接收请求的吗?
    如果是的话,直接用
    Accept(*chatsocket))就行了,不过看你上面
    pListeningSocket = new CListeningSocket(this);这句,这句是在窗体类里面的吧
    那CListenSocket类里面一定有一个CXXDlg(就是你的窗体类)的一个指针了,这样的话,你就要在
    void CListenSocket::OnAccept(int nErrorCode) {}里面用
    if(m_pMainDlg->pListeningSocket->Accept(*chatsocket))
                {//假设上面的m_pMainDlg为你的窗体类,它接收了
                 //new CListeningSocket(this);中的this 
                           .................
                   }
      

  2.   

    我在CView中定义的pListeningSocket,在CListeningSocket中的OnAccept中调用CView中自定义函数Accept的。
      

  3.   

    其实接收连接不用这很麻烦吧!在ClisteningSocket里就行了
    那不行,你就中CView中自定义函数Accept设一个CListeningSocket指针参数像:void CView::Accept(ClisteningSocket * AccetpSocket)
    {
      CChat* chatsocket=new CChat(this);
      if(!AccetpSocket->Accept(*chatsocket)) /****  在这里出错  ***/
      {
         delete chatsocket;
      }
    ........
    }
    在CListeningSocket中的OnAccept中调用:
    m_pWiew->Accept(this);