被心跳包搞疯了,实在加不下去

被心跳包搞疯了,实在加不上去?
C/C++ code


ypedef shared_ptr<tcp::socket> sock_pt;



#define max_len  100

class ClientSession : public enable_shared_from_this<ClientSession>
{
public:
    ClientSession(io_service& ioservice, sock_pt sock)
        :m_socket(sock)
    {
        memset(m_data, '\0', sizeof(m_data));
        //安装定时器
        
         
    }

    sock_pt socket()
    {
        return m_socket;
    }


    void startWrite(    )
    {
        strncpy(m_data,"hello",strlen("hello")+1);
        m_socket->async_write_some(buffer(m_data, max_len),
            boost::bind(&ClientSession::handle_write, shared_from_this(), placeholders::error));
    }



private:
    
    

    void handle_write(const boost::system::error_code& error)
    {
        if (! error)
        {
            m_socket->async_write_some(buffer(m_data, max_len), 
                boost::bind(&ClientSession::handle_write, shared_from_this(), placeholders::error));

        }
        else
        {
            m_socket->close();
        }
    }



private:
    sock_pt m_socket;
    char m_data[max_len];
    DWORD m_lastTime;
    DWORD m_currTime;
    
};





class serverApp
{
    typedef boost::shared_ptr<ClientSession> session_ptr;

public:
    serverApp(io_service& ioservice,tcp::endpoint& endpoint)
        :m_ioservice(ioservice),
        m_acceptor(ioservice, endpoint)
    {
    
            sock_pt sock(new tcp::socket(ioservice));
            m_acceptor.async_accept(*sock, boost::bind(&serverApp::handle_accept, this, placeholders::error, sock));

        
        
    }



private:
    void handle_accept(const boost::system::error_code& error, sock_pt sock)
    {
        if (! error)
        {
            session_ptr new_session(new ClientSession(m_ioservice, sock));
    
            new_session->startWrite(    );
        }
    }

private:
    io_service& m_ioservice;
    tcp::acceptor m_acceptor;
};





int main(    )
{
    boost::asio::io_service ios;
    serverApp serv(ios, tcp::endpoint(tcp::v4(), 1500));
    boost::thread_group tg;
    tg.add_thread(new boost::thread(boost::bind(&io_service::run, &ios)));

    return 0;
}







1.定时器什么时候安装何时。

2. 安装后,在什么地方检测 客户端发送过来的 暗号(知道这暗号,说明客户端没断线)



------解决方案--------------------
时间单位要统一,你在serverapp里面用秒,client用毫秒明显不合适。checkclient中应该这么写。ticktime(1000)。意思是每次触发间隔是1秒。
在handleread中时间应该重置为CHAOSHI
另外还需要调用onrecv