请教: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);
这个断言为假。
请问各位这是怎么回事呢?正确的应该如何写呢?
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);
这个断言为假。
请问各位这是怎么回事呢?正确的应该如何写呢?
...全文
相关推荐
Linux下Socket编程的端口问题 ( Bind(): Address already in use ) PDF版
### Linux下Socket编程的端口问题 (Bind(): Address already in use)#### 一、问题背景与常见场景在进行Linux下的网络编程时,经常会遇到端口绑定失败的问题
Linux Socket编程端口问题 (Bind(): Address already in use) PDF
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 ### Linux环境下Socket通信的端口号冲突问题 (Bind(): 地址已被占用)#### 一、
Socket编程例子
六、常见问题与解决在实际编程中,可能会遇到如连接超时、数据丢失、端口冲突等问题。解决这些问题通常需要设置合适的超时时间、检查网络状况、避免使用已被占用的端口,以及正确处理异常情况。
powerbuilder 使用 socket编程.docx
在使用PowerBuilder进行Socket编程时,我们主要关注的是如何通过Socket进行网络通信,特别是处理客户端和服务端之间的连接问题。
python socket网络编程之粘包问题详解
在Python的socket编程中,处理粘包问题通常需要自定义消息格式,通过消息头或分隔符来确保数据的正确解析。


网络编程
