被心跳包搞疯了,实在加不下去
被心跳包搞疯了,实在加不上去?
1.定时器什么时候安装何时。
2. 安装后,在什么地方检测 客户端发送过来的 暗号(知道这暗号,说明客户端没断线)
------解决方案--------------------
时间单位要统一,你在serverapp里面用秒,client用毫秒明显不合适。checkclient中应该这么写。ticktime(1000)。意思是每次触发间隔是1秒。
在handleread中时间应该重置为CHAOSHI
另外还需要调用onrecv
- 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