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 }
关于这两个库的比较好的学习地址: