From 4e97ca4b9a655786882f5ba2e4eab8b607e8ea4f Mon Sep 17 00:00:00 2001 From: adminPyf <3043130461@qq.com> Date: Wed, 30 Jun 2021 00:24:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20'test=5Fbufffer=5Ffilter=5Fzlib'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 鏇存柊 --- test_bufffer_filter_zlib/Makefile | 2 +- test_bufffer_filter_zlib/zlib_client.cpp | 62 ++++++++++++------------ test_bufffer_filter_zlib/zlib_server.cpp | 34 ++++++------- 3 files changed, 49 insertions(+), 49 deletions(-) diff --git a/test_bufffer_filter_zlib/Makefile b/test_bufffer_filter_zlib/Makefile index 19021e7..11ad540 100644 --- a/test_bufffer_filter_zlib/Makefile +++ b/test_bufffer_filter_zlib/Makefile @@ -1,2 +1,2 @@ -test_bufffer_filter: test_bufffer_filter.cpp +test_bufffer_filter_zlib: test_bufffer_filter_zlib.cpp zlib_client.cpp zlib_server.cpp g++ $^ -o $@ -levent \ No newline at end of file diff --git a/test_bufffer_filter_zlib/zlib_client.cpp b/test_bufffer_filter_zlib/zlib_client.cpp index 49dd0ef..73ee0dd 100644 --- a/test_bufffer_filter_zlib/zlib_client.cpp +++ b/test_bufffer_filter_zlib/zlib_client.cpp @@ -39,51 +39,51 @@ bufferevent_filter_result clinet_filter_out(struct evbuffer *src, struct evbuffe evbuffer_add(dst, data, len); return BEV_OK; } - //开始压缩文件 - //1.取出buffer中的数据的引用 + //寮濮嬪帇缂╂枃浠 + //1.鍙栧嚭buffer涓殑鏁版嵁鐨勫紩鐢 evbuffer_iovec v_in[1] = {0}; int n = evbuffer_peek(src, -1, 0, v_in, 1); if (n <= 0) { - //没有数据 + //娌℃湁鏁版嵁 return BEV_NEED_MORE; } z_stream *p = clientStatus->z_output; if (!p) { return BEV_ERROR; } - //输入数据大小 + //杈撳叆鏁版嵁澶у皬 p->avail_in = v_in[0].iov_len; - //输入数据地址 + //杈撳叆鏁版嵁鍦板潃 p->next_in = (Byte*)v_in[0].iov_base; - //申请输出空间大小 + //鐢宠杈撳嚭绌洪棿澶у皬 evbuffer_iovec v_out[1] = { 0 }; n = evbuffer_reserve_space(dst, 4096, v_out, 1); if (n < 0) return BEV_ERROR; - //zlib输出空间大小 + //zlib杈撳嚭绌洪棿澶у皬 p->avail_out = v_out[0].iov_len; - //zlib输出空间地址 + //zlib杈撳嚭绌洪棿鍦板潃 p->next_out = (Byte*)v_out[0].iov_base; - //zlib 压缩 + //zlib 鍘嬬缉 int re = deflate(p, Z_SYNC_FLUSH); if (re != Z_OK) { cerr << "deflate falid" << endl; } - //压缩用了多少数据 - //p->avail_in 未处理数据大小 + //鍘嬬缉鐢ㄤ簡澶氬皯鏁版嵁 + //p->avail_in 鏈鐞嗘暟鎹ぇ灏 int nread = v_in[0].iov_len - p->avail_in; - //压缩后数据大小 - //v_out[0].iov_len 剩余空间大小 + //鍘嬬缉鍚庢暟鎹ぇ灏 + //v_out[0].iov_len 鍓╀綑绌洪棿澶у皬 int nwrite = v_out[0].iov_len - p->avail_out; - //移除 source evbuffer中数据 + //绉婚櫎 source evbuffer涓暟鎹 evbuffer_drain(src, nread); - //传入des evbuffer + //浼犲叆des evbuffer v_out[0].iov_len = nwrite; evbuffer_commit_space(dst, v_out, 1); cout << "nread = " << nread << " nwirte=" << nwrite << endl; @@ -91,13 +91,13 @@ bufferevent_filter_result clinet_filter_out(struct evbuffer *src, struct evbuffe } void clinet_read_cb(bufferevent *bev, void *arg) { ClientStatus *clientStatus = (ClientStatus *)arg; - //002 接收服务端发送的OK消息 + //002 鎺ユ敹鏈嶅姟绔彂閫佺殑OK娑堟伅 char data[1024] = { 0 }; int len = bufferevent_read(bev, data, sizeof(data) - 1); if (strcmp(data, "ok") == 0) { cout << data << endl; clientStatus->startSend = true; - //开始发送文件 + //寮濮嬪彂閫佹枃浠 bufferevent_trigger(bev, EV_WRITE, 0); } else { @@ -110,10 +110,10 @@ void clinet_read_cb(bufferevent *bev, void *arg) { void clinet_write_cb(bufferevent *bev, void *arg) { ClientStatus *clientStatus = (ClientStatus *)arg; FILE *fp = clientStatus->fp; - //判断什么时候清理资源 + //鍒ゆ柇浠涔堟椂鍊欐竻鐞嗚祫婧 if (clientStatus->end) { - //判断缓冲是否有数据 如果有就刷新 - //获取过滤器绑定的buffer + //鍒ゆ柇缂撳啿鏄惁鏈夋暟鎹 濡傛灉鏈夊氨鍒锋柊 + //鑾峰彇杩囨护鍣ㄧ粦瀹氱殑buffer bufferevent * be = bufferevent_get_underlying(bev); evbuffer *evb = bufferevent_get_output(be); int len = evbuffer_get_length(evb); @@ -127,7 +127,7 @@ void clinet_write_cb(bufferevent *bev, void *arg) { return; } if (!fp) { - cout << "open file " << FILEPATH << "faild!" << endl; + cout << "open file " << FILEPATH << "faild锛" << endl; return; } char data[1024] = { 0 }; @@ -148,26 +148,26 @@ void client_event_cb(struct bufferevent *bev, short what, void *ctx) { cout << "client_event_cb" << what << endl; if (what & BEV_EVENT_CONNECTED) { cout << "BEV_EVENT_CONNECTED" << endl; - //001 发送文件名 + //001 鍙戦佹枃浠跺悕 bufferevent_write(bev, FILEPATH,strlen(FILEPATH)); FILE *fp = fopen(FILEPATH, "rb"); if (!fp) { - cout << "open file " << FILEPATH << "faild!" << endl; + cout << "open file " << FILEPATH << "faild锛" << endl; } ClientStatus *clientStatus = new ClientStatus; clientStatus->fp = fp; - //初始化zlib上下文 + //鍒濆鍖杬lib涓婁笅鏂 clientStatus->z_output = new z_stream(); deflateInit(clientStatus->z_output, Z_DEFAULT_COMPRESSION); - //创建输出过滤 + //鍒涘缓杈撳嚭杩囨护 bufferevent *bev_filter = bufferevent_filter_new(bev, - 0,//输入过滤函数 - clinet_filter_out, //输出过滤 - BEV_OPT_CLOSE_ON_FREE | BEV_OPT_DEFER_CALLBACKS, //关闭filter同时关闭bufferevent 延时调用 - 0, //清理回调 + 0,//杈撳叆杩囨护鍑芥暟 + clinet_filter_out, //杈撳嚭杩囨护 + BEV_OPT_CLOSE_ON_FREE | BEV_OPT_DEFER_CALLBACKS, //鍏抽棴filter鍚屾椂鍏抽棴bufferevent 寤舵椂璋冪敤 + 0, //娓呯悊鍥炶皟 clientStatus); @@ -177,7 +177,7 @@ void client_event_cb(struct bufferevent *bev, short what, void *ctx) { } void Client(event_base* base) { cout << "begin Client" << endl; - //连接服务器 + //杩炴帴鏈嶅姟鍣 sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; @@ -185,7 +185,7 @@ void Client(event_base* base) { evutil_inet_pton(AF_INET,"127.0.0.1",&sin.sin_addr.s_addr); bufferevent* bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE); - //只绑定连接事件回调,用于确认连接成功 + //鍙粦瀹氳繛鎺ヤ簨浠跺洖璋冿紝鐢ㄤ簬纭杩炴帴鎴愬姛 bufferevent_enable(bev, EV_READ | EV_WRITE); bufferevent_setcb(bev, 0, 0, client_event_cb, 0); diff --git a/test_bufffer_filter_zlib/zlib_server.cpp b/test_bufffer_filter_zlib/zlib_server.cpp index 2a5f72c..6a37d4e 100644 --- a/test_bufffer_filter_zlib/zlib_server.cpp +++ b/test_bufffer_filter_zlib/zlib_server.cpp @@ -25,7 +25,7 @@ bufferevent_filter_result server_filter_in(struct evbuffer *src, struct evbuffer { cout << "server_filter_in" << endl; - //1.接收客户端发送的文件名 + //1.鎺ユ敹瀹㈡埛绔彂閫佺殑鏂囦欢鍚 char data[1024] = { 0 }; int len = evbuffer_remove(src, data, sizeof(data) - 1); evbuffer_add(dst, data, len); @@ -42,7 +42,7 @@ void server_read_cb(bufferevent *bev, void *arg) { out += data; status->fp = fopen(out.c_str(), "wb"); if (!status->fp) { - cout << "open file " << out << "faild!" << endl; + cout << "open file " << out << "faild锛" << endl; return; } @@ -51,7 +51,7 @@ void server_read_cb(bufferevent *bev, void *arg) { return; } - //写入文件 + //鍐欏叆鏂囦欢 do { char data[1024] = { 0 }; int len = bufferevent_read(bev, data, sizeof(data) - 1); @@ -80,17 +80,17 @@ void server_listen_cb(struct evconnlistener *e, evutil_socket_t s, struct sockad { std::cout << "server_listen_cb" << std::endl; event_base *base = (event_base *)arg; - // 1.创建bufferevent 用于通信 + // 1.鍒涘缓bufferevent 鐢ㄤ簬閫氫俊 bufferevent *bev = bufferevent_socket_new(base, s, BEV_OPT_CLOSE_ON_FREE); - // 2.添加过滤 并设置输入回调 + // 2.娣诲姞杩囨护 骞惰缃緭鍏ュ洖璋 Status *status = new Status; bufferevent *bev_filter = bufferevent_filter_new(bev, - server_filter_in,//输入过滤函数 - 0, //输出过滤 - BEV_OPT_CLOSE_ON_FREE, //关闭filter同时关闭bufferevent - 0, //清理回调 - status); //传递参数 - // 3.设置回调 读取 事件(处理连接断开) + server_filter_in,//杈撳叆杩囨护鍑芥暟 + 0, //杈撳嚭杩囨护 + BEV_OPT_CLOSE_ON_FREE, //鍏抽棴filter鍚屾椂鍏抽棴bufferevent + 0, //娓呯悊鍥炶皟 + status); //浼犻掑弬鏁 + // 3.璁剧疆鍥炶皟 璇诲彇 浜嬩欢锛堝鐞嗚繛鎺ユ柇寮锛 bufferevent_setcb(bev_filter, server_read_cb, 0, server_event_cb, status); bufferevent_enable(bev_filter, EV_READ | EV_WRITE); } @@ -104,11 +104,11 @@ void Server(event_base* base) { sin.sin_family = AF_INET; sin.sin_port = htons(SPORT); - evconnlistener *ev = evconnlistener_new_bind(base, //libevent上下文 - server_listen_cb, //接收到连接的回调函数 - base, //回调函数获取的参数(根据业务来) - LEV_OPT_REUSEABLE | LEV_OPT_CLOSE_ON_FREE, //地址重用,evconnlistener关闭同时关闭socket - 10, //连接队列大小,对应listen函数参数 - (sockaddr *)&sin, //绑定的地址和端口 + evconnlistener *ev = evconnlistener_new_bind(base, //libevent涓婁笅鏂 + server_listen_cb, //鎺ユ敹鍒拌繛鎺ョ殑鍥炶皟鍑芥暟 + base, //鍥炶皟鍑芥暟鑾峰彇鐨勫弬鏁(鏍规嵁涓氬姟鏉) + LEV_OPT_REUSEABLE | LEV_OPT_CLOSE_ON_FREE, //鍦板潃閲嶇敤锛宔vconnlistener鍏抽棴鍚屾椂鍏抽棴socket + 10, //杩炴帴闃熷垪澶у皬锛屽搴攍isten鍑芥暟鍙傛暟 + (sockaddr *)&sin, //缁戝畾鐨勫湴鍧鍜岀鍙 sizeof(sin)); } \ No newline at end of file