为什么socket会突然断了
一台服务器win server2003,一台是客户端普通PC,装XP。用socket(TCP)通信,服务器给客户端发数据.用CSocket编程,它的函数OnClose()判断对方socket是否中断.。过了不到3个小时,服务器提示SOCKET已经断了,而客户端没有提示SOCKET中断呢?
////////////////////////////服务器
void CMyServerSocket::OnClose(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
CElectricPowerApp* pApp = DYNAMIC_DOWNCAST(CElectricPowerApp, AfxGetApp());
CSocket::OnClose(nErrorCode);
::PostMessage(::AfxGetApp()->m_pMainWnd->m_hWnd,U_SOCKET_CLOSE,(WPARAM)this,0);
AfxMessageBox("对方socket已经断了");
}
//ON_MESSAGE(U_SOCKET_CLOSE,OnClientClose)
LRESULT CMainFrame::OnClientClose(WPARAM wParam,LPARAM lParam)
{
CElectricPowerApp* pApp = DYNAMIC_DOWNCAST(CElectricPowerApp, AfxGetApp());
if (!pApp)
{
TRACE0("CMainFrame::OnClientClose中,CElectricPowerApp指针为空");
return -1;
}
CMyServerSocket* pSocket = (CMyServerSocket*)wParam;
pApp->listenSocket.CloseSocket(pSocket);
return 1;
}
//////////////客户端
void CMyClientSocket::OnClose(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
CSocket::OnClose(nErrorCode);
Close();
::PostMessage(::AfxGetApp()->m_pMainWnd->m_hWnd,U_SOCKET_CLOSE,(WPARAM)this,0);
AfxMessageBox("连接关闭!要通讯请重新连接!");
CEP_ClientApp* pApp = DYNAMIC_DOWNCAST(CEP_ClientApp, AfxGetApp());
if (!pApp)
return;
}
//ON_MESSAGE(U_SOCKET_CLOSE,OnClientClose)
LRESULT CMainFrame::OnClientClose(WPARAM wParam,LPARAM lParam)
{
CEP_ClientApp* pApp = DYNAMIC_DOWNCAST(CEP_ClientApp, AfxGetApp());
if (!pApp)
{
TRACE0("CMainFrame::OnClientClose中,CEP_ClientApp指针为空");
return -1;
}
delete pApp->m_pMyClientSocket;
pApp->m_pMyClientSocket = NULL;
return 1;
}