客户端:
#include<event2/event-config.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<event.h>
#include<event2/util.h>
int tcp_connect_server(const char* server_ip, int port);
void cmd_msg_cb(int fd, short events, void* arg);
void socket_read_cb(int fd, short events, void* arg);
int main(int argc, char** argv) {
if(argc < 3) {
printf("please input 2 parameter \n");
return -1;
}
//两个参数依次是服务器端的IP地址,端口号
int sockfd = tcp_connect_server(argv[1],atoi(argv[2]));
if( sockfd == -1) {
perror("tcp_connect error ");
return -1;
}
printf("connect to server successful \n");
struct event_base* base = event_base_new();
//监听读事件
struct event* ev_sockfd = event_new(base,sockfd,EV_READ | EV_PERSIST, socket_read_cb, NULL);
event_add(ev_sockfd, NULL); //正式添加事件
//监听终端输入事件
struct event* ev_cmd = event_new(base,STDIN_FILENO,EV_READ | EV_PERSIST, cmd_msg_cb, (void*)&sockfd);
//回调函数:参数是:fd,event,arg
event_add(ev_cmd,NULL); //添加事件
event_base_dispatch(base); //进入循环,等待就绪事件并执行事件处理
printf("finished\n");
return 0;
}
void cmd_msg_cb(int fd, short events, void* arg) { // fd:STDIN_FILENO,event:EV_READ | EV_PERSIST,arg:sockfd;
//该回调函数作用是从标准输入读到msg,再把msg的数据发送给sockfd(服务器端)
char msg[1024];
int ret