);
if (listenfd == -1) {
perror("socket error:");
exit(1);
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_pton(AF_INET, ip, &servaddr.sin_addr);
servaddr.sin_port = htons(port);
if (bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1) {
perror("bind error: ");
exit(1);
}
return listenfd;
}
客户端代码
#include "multiplexing.h"
#define MAXLINE 1024
#define IPADDRESS "127.0.0.1"
#define SERV_PORT 8787
static void handle_connection(int sockfd);
int main(int argc, char *argv[]) {
int sockfd;
struct sockaddr_in servaddr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
inet_pton(AF_INET, IPADDRESS, &servaddr.sin_addr);
connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
// 改动此处,调用不同的IO复用函数
MySelect mltp(2, sockfd);
//MyPoll mltp(2, sockfd);
//MyEpoll mltp(2, sockfd);
poll.client_do_multiplexing(); // 处理客户端
return 0;
}
运行结果
服务端:
客户端:
完整代码可以访问笔者github:https://github.com/yearsj/ClientServerProject.git
参考资料
IO多路复用之select总结
IO多路复用之poll总结
IO多路复用之epoll总结
作者:yearsj
转载请注明出处:https://www.cnblogs.com/yearsj/p/9647351.html
segmentfault对应博文:https://segmentfault.com/a/1190000016400430