#include#include#include#include#include

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

用libevent實現(xiàn)簡易的telnet

系統(tǒng) 1947 0
    我承認(rèn)這篇文章有點標(biāo)題黨,呵呵。其實就是一個能和服務(wù)器建立全雙工通信的客戶端而已,用網(wǎng)絡(luò)庫libevent實現(xiàn)。
  
    從這里也可以看出,同樣的功能,分別用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>



//發(fā)生了致命錯誤,輸入錯誤信息,退出程序

void error_quit(const char *str)

{

	perror(str);

	exit(1); 

}



//連接狀態(tài)改變時回調(diào)的函數(shù)

void eventcb(struct bufferevent *bev, short events, void *ptr)

{

	struct event_base *tbase = (struct event_base*)ptr;

	//如果不是連接成功的消息,就停止事件循環(huán)

	if ( !(events & BEV_EVENT_CONNECTED) ) 

	{

		bufferevent_free(bev);

		event_base_loopbreak(tbase);

		printf("The connect have been shutdown: %X\n", events);

	} 

}



//服務(wù)器傳信息過來了

void sockreadcb(struct bufferevent *bev, void *ptr)

{

	struct evbuffer *input = bufferevent_get_input(bev);

	evbuffer_write(input, STDOUT_FILENO);

}



//標(biāo)準(zhǔn)輸入傳消息過來了

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();



	//連接服務(wù)器并監(jiān)聽

	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);



	//監(jiān)聽標(biāo)準(zhǔn)輸入

	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);



	//開始事件循環(huán)

	event_base_dispatch(base);



	return 0;

}
  
    編譯與運行命令:

gcc mytelnet.c -o mytelnet -levent

./mytelnet 127.0.0.1 8877
  
    用于測試的服務(wù)器:
    
      http://blog.csdn.net/aaa20090987/article/details/8769585
    
  

用libevent實現(xiàn)簡易的telnet


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美午夜毛片a级在线 | 狠狠婷 | 99福利在线 | 免费高清在线爱做视频 | 欧美日韩中文字幕在线手机版本 | 精品在线一区二区三区 | 色综合久久精品中文字幕首页 | 素人259luxu在线观看暴露 | 亚洲精品国产综合久久一线 | 奇米影视777在线观看 | 午夜视频在线观看国产www | 亚洲高清视频在线 | 最新毛片久热97免费精品视频 | 2019年国产高清情侣视频 | 99久久免费精品视频 | 欧美一级毛片在线看视频 | 9久re在线观看视频精品 | 欧美性xxxx偷拍 | 操综合网 | 国产欧美成人 | 天天综合天天干 | 在线国产网站 | 欧美亚洲国产人成aaa | 四虎永久在线精品免费影视 | 国产精品女仆装在线播放 | 在线 | 一区二区三区四区 | 欧美在线一 | 国产欧美日韩网站 | 中文字幕不卡在线播放 | 欧美激情中文字幕一区二区 | 毛片网站免费在线观看 | 咪咪爱毛片| 亚欧成人毛片一区二区三区四区 | 欧美综合视频在线观看 | 久青草国产在线视频_久青草免 | 日韩不卡免费视频 | 久久久四虎成人永久免费网站 | 久久精品日日躁夜夜躁欧美 | 这里只有精品在线 | 国产大尺度福利视频在线观看 | 国产精品公开免费视频 |