我的程序采用CAsyncSocket连接多台主机的SERVER端,运行一段时间后(不定期),报出ASSERT错误,发现是SOCKCORE.CPP的第512行ASSERT(pSocket != NULL); 由于该问题不定期出现(在用户的机器上),后来我在公司的机器上进行模拟测试,加大数据量,并模拟网络断开,断掉重联,客户端不断向多台主机的服务器程序发送消息,服务器端程序也不停的向我的程序发送消息,中间还自动关闭连接(服务器端),拔掉网线,我的程序自动连接服务器端程序,但是,无论怎样测试,均无法模拟出该问题. 现在确实判断不错问题在哪里,向大家请教.
解决方案 »
- VC添加串口读数据后无法进入onpain画界面
- 我是要实现向qq一样能复制图片和字符串 我是用RichEdit插入Ole来显示gif图片的 请问我要从RichEdit中拷贝粘贴gif图片改怎么实现啊 多谢了 如有代码请发一份给我 我的邮箱是[email protected] 不胜感激
- 不知道是不是DLL模块切换的问题求助高手。(分不够再加,帮忙细看看,谢谢)
- 高分求拦截API函数的例子!
- 请问如何让一个程序嵌在网页浏览器中运行啊?如何在网页上实现视频聊天?
- getFieldValue取值时,如果连的是Oracle字段名必须用大写,而连sql server时大小写都可以,有什么可以调整的参数吗?
- 如何编程登录局域网上邻居的机器!
- Windows sockets 编程?
- 致各位在微软的朋友
- 进程A启动进程B,进程b起来后,输入焦点却还在进程A上
- 求助.一个访问sql数据库的问题
- 标准控件 CButton的颜色的设置?
MFC的类里总是这么干!!!
肯定是楼主代码出问题了,同意: PiggyXP(【小猪】●你快乐于是我快乐)
楼主看看代码发现不了问题吗??就是pSocket在不该为空的时候被释放掉了啊楼主SOCKET断开的时候有没有做处理呀!
{
if (wParam == 0 && lParam == 0)
return; // Has the socket be closed?
CAsyncSocket* pSocket = CAsyncSocket::LookupHandle((SOCKET)wParam, TRUE); // If yes ignore message
if (pSocket != NULL)
return; pSocket = CAsyncSocket::LookupHandle((SOCKET)wParam, FALSE);
if (pSocket == NULL)
{
// Must be in the middle of an Accept call
pSocket = CAsyncSocket::LookupHandle(INVALID_SOCKET, FALSE);
ASSERT(pSocket != NULL);
pSocket->m_hSocket = (SOCKET)wParam;
CAsyncSocket::DetachHandle(INVALID_SOCKET, FALSE);
CAsyncSocket::AttachHandle(pSocket->m_hSocket, pSocket, FALSE);
} int nErrorCode = WSAGETSELECTERROR(lParam);
switch (WSAGETSELECTEVENT(lParam))
{
case FD_READ:
{
DWORD nBytes;
if (!pSocket->IOCtl(FIONREAD, &nBytes))
nErrorCode = WSAGetLastError();
if (nBytes != 0 || nErrorCode != 0)
pSocket->OnReceive(nErrorCode);
}
break;
case FD_WRITE:
pSocket->OnSend(nErrorCode);
break;
case FD_OOB:
pSocket->OnOutOfBandData(nErrorCode);
break;
case FD_ACCEPT:
pSocket->OnAccept(nErrorCode);
break;
case FD_CONNECT:
pSocket->OnConnect(nErrorCode);
break;
case FD_CLOSE:
pSocket->OnClose(nErrorCode);
break;
}
}MFC中报出ASSERT错误的代码为 ASSERT(pSocket != NULL);可是 pSocket = CAsyncSocket::LookupHandle(INVALID_SOCKET, FALSE);
这个指针怎么会是NULL呢?难道是在进入此函数时,该SOCKET已经被关闭了,并且资源被清除了? 我在OnClose()部分是这样处理的:
void CClientSocket::OnClose(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
Close(); m_bConnect=FALSE;
m_bReport=TRUE;
m_pDoc->ReportConnectClose();
CAsyncSocket::OnClose(nErrorCode);
}
Close();
pSocket = NULL;