为什么socket会突然断了

eiming 2006-12-07 12:10:49
一台服务器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;
}

...全文
311 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
eiming 2006-12-07
  • 打赏
  • 举报
回复
还有有没有别的见解呀,都不是很确定啊
Yao-debo 2006-12-07
  • 打赏
  • 举报
回复
服务器有监听的功能,所以能迅速检测到连接中断,但客户端是没有的。
这是关于两端不一样的解释,不知道这样的解释对不对?
有高手的话,请指正!
xdlous 2006-12-07
  • 打赏
  • 举报
回复
LS正解,
过段时间发个包维持连接吧!
ProgrameMan 2006-12-07
  • 打赏
  • 举报
回复
长时间没有数据交互的原因吧,如果长时间没有数据交互TCP会视连接为无效。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧