博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于libsmart的网络编程示例之EchoServer
阅读量:7014 次
发布时间:2019-06-28

本文共 2176 字,大约阅读时间需要 7 分钟。

hot3.png

#include "xsmart.h"#include "xnet/NetReactor.h"#include "xbase/xlogger.h"#include "xbase/xtime.h"#include "xbase/xthread.h"class CEchoServer : public IEventHandler{public:	CEchoServer();	virtual ~CEchoServer();public:	void init();	void unInit();	int startListen(const char* ip, int port);protected:	virtual int on_connect(SOCK_FD cli_fd, const char* remote_ip, int remote_port);	virtual int on_recv_data(SOCK_FD fd, const char* data, int len, const char* remote_ip, int remote_port);	virtual int on_send_ack(SOCK_FD fd, int len);	virtual int on_close(SOCK_FD fd, int error);private:	XNetReactor m_net_obj;};

#include "echoserver.h"CEchoServer::CEchoServer(){}CEchoServer::~CEchoServer(){}void CEchoServer::init(){	m_net_obj.init_reactor(this, XNetReactor::REACTOR_TCP_SERVER, XNetReactor::REACTOR_EPOLL);}void CEchoServer::unInit(){	m_net_obj.uninit_reactor();}int CEchoServer::startListen(const char* ip, int port){	SOCK_FD listenfd = m_net_obj.open_tcp_server(ip, port);	return listenfd;}//callbackint CEchoServer::on_connect(SOCK_FD cli_fd, const char* remote_ip, int remote_port){	XLOG_INFO("on_connect(%d, %s, %d)", cli_fd, remote_ip, remote_port);	return 0;}int CEchoServer::on_recv_data(SOCK_FD fd, const char* data, int len, const char* remote_ip, int remote_port){	char* pBuf = new char[len+1];	pBuf[len] = '\0';	memcpy(pBuf, data, len);	smart::XMyTime tm;	XLOG_INFO("remote[%s:%d]-echo[len=%d]->{%s} @%s", remote_ip, remote_port, len, pBuf, tm.format().c_str());	//echo to client	m_net_obj.send(fd, data, len);	SAFE_DELETE_A(pBuf);	return 0;}int CEchoServer::on_send_ack(SOCK_FD fd, int len){	return 0;}int CEchoServer::on_close(SOCK_FD fd, int error){	XLOG_INFO("on_close(%d, %d)", fd, error);	return 0;}

#include "echoserver.h"int main(int argc, char* argv[]){	smart::XSmartLib::init();	XLOG_SET_STDERR(true);	CEchoServer* echoService = new CEchoServer();	echoService->init();	echoService->startListen("0.0.0.0", 8800);	char c;	do {		c = getchar();		SLEEP_MS(100);		printf("Press q or Q to exit...\n");	}while(c!='q' && c!='Q');		echoService->unInit();	SAFE_DELETE(echoService);	smart::XSmartLib::unInit();	return 0;}

转载于:https://my.oschina.net/jackhen/blog/613162

你可能感兴趣的文章
Wix学习整理(5)——安装时填写注册表
查看>>
推荐一个IE6下js调试工具(Companion.JS)
查看>>
Thrift 个人实战--Thrift 网络服务模型
查看>>
利用jQuery实现回收站删除效果
查看>>
php形式的内容被处理
查看>>
清除TFS版本控制信息
查看>>
nagios插件之监控if8接口日志(新接口)
查看>>
同一个存储过程中,不能多次select into 到同一张表的问题
查看>>
私有析构函数 Android 代码分析
查看>>
MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引
查看>>
素数推断算法(高效率)
查看>>
Exchanging Partitions and Subpartitions with Tables--官方文档
查看>>
js原生继承之——组合式继承实例
查看>>
log4j配置
查看>>
Jekyll学习:基本使用方法
查看>>
[Typescript] Typescript Enums vs Booleans when Handling State
查看>>
Java中HashMap源码分析
查看>>
jsp ${param.id}用法
查看>>
(转)c#.net常用字符串函数
查看>>
JSTL、EL、ONGL、Struts标签的区别与使用
查看>>