我在远程几台服务器上部署了个socket服务端,本地客户端连接上去后,客户端5分钟内没有发送消息准时自动断开,需要重连,但是其中有一台服务器不会出现这个请况。
然后如果在局域网内部署socket服务端,客户端连接却不会有超时自动断开的问题,这是什么原因?
有人说是服务器上系统环境TCP参数配置问题,但是具体是什么参数呢?
我现在想不管什么环境,socket客户端连接后就不会断开,先不管是在socket程序里配置什么东西,我现在想知道系统环境这边对socket程序的影响,麻烦大家帮我找找原因,谢谢啦

解决方案 »

  1.   

    同一楼上的说法,看看服务器防火墙的设置,还有程序本身的SOCKET设置
      

  2.   

    和TCP没关系,就应该是服务器的硬件防火墙等限制
      

  3.   

    void TcpConnection::SetKeepAlive(bool bOnOff, DWORD nKeepAliveTime, DWORD nKeepAliveInterval)
    {
    DWORD dwError = 0L;
    DWORD dwBytes = 0L;
    tcp_keepalive sKA_Settings = {0}, sReturned = {0} ;
    sKA_Settings.onoff = bOnOff;
    sKA_Settings.keepalivetime = nKeepAliveTime;  sKA_Settings.keepaliveinterval = nKeepAliveInterval;
    if (WSAIoctl(m_Socket, SIO_KEEPALIVE_VALS, &sKA_Settings,
    sizeof(sKA_Settings), &sReturned, sizeof(sReturned), &dwBytes,
    NULL, NULL) != 0)
    {
    dwError = WSAGetLastError() ;
    }}
    用这个方法把socket的keepalive模式打开:
    pConn->SetKeepAlive(TRUE, 6000, 1000); //每6秒发送一次keepalive,超时1秒重发这样就不会因为长时间无数据而被防火墙强行RST