请问TCPPULLServer如何保持长连接

sunnyatqd 发布于 2017/01/03 09:08
阅读 835
收藏 0

版主您好:

    我用TCPPULLServer编写的服务器,要求TCP连接为长连接,但是我发现TCP客户端(这个TCP客户端不是用TcpPullClient编写的)的连接莫名断开,使用抓包软件发现是服务端主动切断的,但是根据OnClose和OnError都没有触发,而且我把所有断开连接的函数都注销了,还是莫名切断端连接,我启动TCPPullserver的函数源码是这样的:

void CMainFrame::fListenStart()
{
EnSendPolicy enSendPolicy = (EnSendPolicy)0;
EnRecvPolicy enRecvPolicy = (EnRecvPolicy)0;
m_Server->SetSendPolicy(enSendPolicy);
m_Server->SetRecvPolicy(enRecvPolicy);
m_Server->SetAcceptSocketCount(2000);
m_Server->SetKeepAliveTime(0);
m_Server->SetKeepAliveInterval(0);
m_Server->SetMarkSilence(TRUE);

if (m_Server->Start(theApp.m_iniFile.m_cstrServerIp, theApp.m_iniFile.m_usListenPort))
{
m_pDispView->fDispProcess(_T("启动TCP监听"), true);
}
else
{
m_pDispView->fDispProcess(_T("启动TCP监听"), false);
}
}

请版主指点,谢谢!

以下是问题补充:

@sunnyatqd:问题中提到的客户端,在使用其他的TCPServer(如用winsocket直接编写的服务器)下使用没有被断开的问题。 (2017/01/03 09:16)
加载中
0
盆栽里有熊猫
你调用了m_Server->SetMarkSilence(TRUE),你看你有没有调用DisconnectSilenceConnections(),客户端如果没有发送命令,表示是静默的,固定一段时间会断开的
0
盆栽里有熊猫
你用了m_Server->SetMarkSilence(TRUE);看看你有没有调用DisconnectSilenceConnections()关闭静默连接,如果长连接的客户端在一段时间内没有发送命令,表示是静默的
0
s
sunnyatqd

我已经把DisconnectSilenceConnections()注释掉了,但是服务器还是切掉客户端,另外想问一下DisconnectSilenceConnections()不会触发OnClose消息吗

返回顶部
顶部