libevent和libcurl的一些学习
libcurl是一个用于传递数据的库;libevent则是提供服务器相应操作的库。
网上关于libcurl的介绍很多,主要介绍了如何用它下载网页等功能,另外网上也有许多相关php代码的实例。libevent的相关资源比较少。
一下是我实现的两个简单的小例子,一个利用libcurl发送数据,一个利用libevent去接收。
libcurl.c 发送数据
1 #include<curl/curl.h> 2 #include<stdio.h> 3 int main(void){ 4 char *url="http://127.0.0.1:8080/test"; 5 char mypost[]="asdfasdfasdfsdf"; 6 // mypost[4]='\0'; 7 // CURLcode return_code; 8 // return_code=curl_global_init(CURL_GLOBAL_WIN32); 9 CURL *curl=curl_easy_init(); 10 if(curl==NULL){ 11 perror("get a easy heandle failed.\n"); 12 curl_easy_cleanup(curl); 13 curl_global_cleanup(); 14 return -1; 15 } 16 curl_easy_setopt(curl,CURLOPT_HEADER,1); 17 curl_easy_setopt(curl,CURLOPT_URL,url); 18 curl_easy_setopt(curl,CURLOPT_POST,1); 19 curl_easy_setopt(curl,CURLOPT_POSTFIELDS,(void *)mypost); 20 curl_easy_perform(curl); 21 curl_easy_cleanup(curl); 22 return 0; 23 }
libevent.c 接收数据
1 #include<stdio.h> 2 #include<evhttp.h> 3 void test_handle(struct evhttp_request *r,void *u){ 4 u_char *buf; 5 buf=EVBUFFER_DATA(r->input_buffer); 6 evhttp_send_reply(r,200,"read ok!",NULL); 7 printf("the host is: %s \n",r->remote_host); 8 printf("the data is:\n%s\n",buf); 9 return ; 10 } 11 int main(void){ 12 char *api_uri="http://127.0.0.1"; 13 struct event_base *base; 14 struct evhttp *http; 15 base =event_base_new(); 16 http=evhttp_new(base); 17 if(!http){ 18 perror("evhttp_new() failed"); 19 return -1; 20 } 21 if(evhttp_bind_socket(http,"0.0.0.0",8080)){ 22 perror("bind_sock() failed"); 23 return -1; 24 } 25 //evhttp_set_cb(http,"/",test_handle,NULL); 26 evhttp_set_gencb(http,test_handle,NULL); 27 event_base_dispatch(base); 28 evhttp_free(http); 29 event_base_free(base); 30 return 0; 31 }
关于这两个库的比较好的学习地址: