请教:Socket编程的问题
一个对话框界面的简单服务器程序,界面上有个“启动服务器”的按钮,其事件代码如下:
void CServerTestDlg::OnStart()
{
g_srvSocket.Create(6000);
if(g_srvSocket.Listen())
{
AfxMessageBox("服务器启动成功,开始监听客户请求!");
}
else
{
AfxMessageBox("服务器启动失败!");
return;
}
AfxBeginThread(ServerThreadFunc, 0);
}
g_srvSocket 是全局变量,ServerThreadFunc是全局函数,用于在新线程中处理到来的连接。
CSocket g_srvSocket;
UINT ServerThreadFunc(LPVOID pParam)
{
CSocket workSocket;
if(!g_srvSocket.Accept(workSocket))
{
AfxMessageBox("Accept出错");
return 1;
}
AfxBeginThread(ServerThreadFunc, pParam);//启动新线程监听
.....
}
但是执行到if(!g_srvSocket.Accept(workSocket))这句就出错了。
调试跟进去,发现是CSocket里面调用了一个PumpMessages函数,而PumpMessages中有句话
ASSERT(pState->m_hSocketWindow != NULL);
这个断言为假。
请问各位这是怎么回事呢?正确的应该如何写呢?