关于多线程WinSocket通信的问题,急!!!
在我的应用程序里,我希望通过建立一个新的线程监听套接字的状态并接受/发送数据,不影响同时进行的其他操作。实现的主要过程如下:
1、响应一个命令消息并开始一个新的线程并在新线程里建立套接字,代码如下:
void CGms4App::OnStartserver()
{
//Setup for Sockets
pMain=AfxBeginThread(MainServerProc,NULL);
}
UINT MainServerProc(LPVOID pParam)
{
theSocket.Create(39990);
theSocket.Listen();
CSocket* pSocketRev=new CSocket;
if(!theSocket.Accept(*pSocketRev))
AfxMessageBox("Sorry");
//接收数据过程
delete pSocketRev;
theSocket.Close();
return 0;
}
2、在应用程序的ExitInstance()函数中作如下处理:
//......
theSocket.Close();
if(pMain)
TerminateThread(pMain->m_hThread,0);
Sleep(1000);
return CWinApp::ExitInstance();
但是,如果没有客户连接到服务器,在我的服务器退出时会出现断言错误,另外,当客户建立连接然后断开后不能恢复连接前的状态。请问上述方法有什么重大缺陷,应如何纠正?
谢谢