日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用libevent实现简易的telnet

發布時間:2025/3/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用libevent实现简易的telnet 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我承認這篇文章有點標題黨,呵呵。其實就是一個能和服務器建立全雙工通信的客戶端而已,用網絡庫libevent實現。 從這里也可以看出,同樣的功能,分別用epoll和libevent來比較,從代碼量和代碼清晰度來說,libevent完勝,呵呵。 上代碼: #include <sys/socket.h> #include <string.h> #include <errno.h> #include <stdlib.h> #include <unistd.h>#include <event.h> #include <event2/event.h>//發生了致命錯誤,輸入錯誤信息,退出程序 void error_quit(const char *str) {perror(str);exit(1); }//連接狀態改變時回調的函數 void eventcb(struct bufferevent *bev, short events, void *ptr) {struct event_base *tbase = (struct event_base*)ptr;//如果不是連接成功的消息,就停止事件循環if ( !(events & BEV_EVENT_CONNECTED) ) {bufferevent_free(bev);event_base_loopbreak(tbase);printf("The connect have been shutdown: %X\n", events);} }//服務器傳信息過來了 void sockreadcb(struct bufferevent *bev, void *ptr) {struct evbuffer *input = bufferevent_get_input(bev);evbuffer_write(input, STDOUT_FILENO); }//標準輸入傳消息過來了 void stdreadcb(struct bufferevent *bev, void *ptr) {struct bufferevent *sockbev = (struct bufferevent*)ptr; struct evbuffer *input = bufferevent_get_input(bev);bufferevent_write_buffer(sockbev, input); }int main(int argc, char **argv) {struct sockaddr_in servaddr;struct event *shellev;int res;struct event_base *base;struct bufferevent *sockbev;struct bufferevent *stdbev;if( argc != 3 )error_quit("Using: mytelnet <Address> <Port>");memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons( atoi(argv[2]) ); res = inet_pton(AF_INET, argv[1], &servaddr.sin_addr); if( res != 1 )error_quit("inet_pton error"); base = event_base_new();//連接服務器并監聽sockbev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);res = bufferevent_socket_connect(sockbev,(struct sockaddr *)&servaddr, sizeof(servaddr));if ( res < 0 ) error_quit("connect error");bufferevent_setcb(sockbev, sockreadcb, NULL, eventcb, (void*)base);bufferevent_enable(sockbev, EV_READ);bufferevent_enable(sockbev, EV_WRITE);//監聽標準輸入stdbev = bufferevent_socket_new(base, STDIN_FILENO, BEV_OPT_CLOSE_ON_FREE);bufferevent_setcb(stdbev, stdreadcb, NULL, NULL, (void*)sockbev);bufferevent_enable(stdbev, EV_READ);bufferevent_enable(stdbev, EV_WRITE);//開始事件循環event_base_dispatch(base);return 0; } 編譯與運行命令: gcc mytelnet.c -o mytelnet -levent ./mytelnet 127.0.0.1 8877 用于測試的服務器:http://blog.csdn.net/aaa20090987/article/details/8769585

轉載于:https://www.cnblogs.com/snake-hand/archive/2013/06/07/3125039.html

總結

以上是生活随笔為你收集整理的用libevent实现简易的telnet的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。