客户机刚连接,服务器这边终止退出了。源代码如下:
(用CNewSocket继承CSocket,重载OnAccept函数,让它调用CServerDlg::OnAccept())
我设了一个按钮:(定义: CNewSocket listenSocket,server;)
void CServerDlg::OnListenBtn()
{
// TODO: Add your control notification handler code here
if(!listenSocket.Create(2002))
{
AfxMessageBox("Create failed ...");
return ;
}
if(!listenSocket.Listen())
{
AfxMessageBox("Listen failed ...");
return;
}
}void CServerDlg::OnAccept()
{
AfxMessageBox("abc");
//客户机连接后,服务器这边正常弹出该对话框,但后面那个“def”的对话框出来之前,程序就终止退出了,一点提示也没。
if(!(listenSocket.Accept(server)))
{
AfxMessageBox("Link failed ...");
return;
}
AfxMessageBox("def");
server.setParent(this);
socketFile=new CSocketFile(&server);
in= new CArchive(socketFile, CArchive::load);
out= new CArchive(socketFile,CArchive::store);
AfxMessageBox("Connect client successfully!");
}另外,若将上述两段代码合到CServerDlg::OnListenBtn()中,就是完全成功的。不过我原想用listenSocket不断监听,创建多个server连接,实现一对多的通讯,代码不分开好像不行啊。
(用CNewSocket继承CSocket,重载OnAccept函数,让它调用CServerDlg::OnAccept())
我设了一个按钮:(定义: CNewSocket listenSocket,server;)
void CServerDlg::OnListenBtn()
{
// TODO: Add your control notification handler code here
if(!listenSocket.Create(2002))
{
AfxMessageBox("Create failed ...");
return ;
}
if(!listenSocket.Listen())
{
AfxMessageBox("Listen failed ...");
return;
}
}void CServerDlg::OnAccept()
{
AfxMessageBox("abc");
//客户机连接后,服务器这边正常弹出该对话框,但后面那个“def”的对话框出来之前,程序就终止退出了,一点提示也没。
if(!(listenSocket.Accept(server)))
{
AfxMessageBox("Link failed ...");
return;
}
AfxMessageBox("def");
server.setParent(this);
socketFile=new CSocketFile(&server);
in= new CArchive(socketFile, CArchive::load);
out= new CArchive(socketFile,CArchive::store);
AfxMessageBox("Connect client successfully!");
}另外,若将上述两段代码合到CServerDlg::OnListenBtn()中,就是完全成功的。不过我原想用listenSocket不断监听,创建多个server连接,实现一对多的通讯,代码不分开好像不行啊。
难道你在别的范围里面执行Accept()的时候因为域不同而是系统放弃了listen()或者与哪一个listen()取得联系?(问题:listen()线程安全吗?)
CClientSocket * pSocket=new CClientSocket; if(Accept(*pSocket))
{
m_Client.AddTail(pSocket);
}
else
delete pSocket;
每次都用那一人,能不出来吧
CList <CSocket CSocket&> listSock;
CClientSocket * pSocket=new CClientSocket; if(Accept(*pSocket))
{
listSock.AddTail(pSocket);
}