我要做一个聊天程序,服务器端有两个类分别用于聊天和侦听,基类都是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;
}
各位看看是哪里出了问题?
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;
}
各位看看是哪里出了问题?
如果是的话,直接用
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
.................
}
那不行,你就中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);