“client.c”
#include<func.h>
#define N 10
int main(int argc,char*argv[])
{
ARGS_CHECK(argc, 3);
int sfd = socket(AF_INET, SOCK_STREAM, 0);
printf("sfd=%d\n",sfd);
struct sockaddr_in serAddr;
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(atoi(argv[2]));
serAddr.sin_addr.s_addr = inet_addr(argv[1]);
int ret = connect(sfd, (struct sockaddr*)&serAddr, sizeof(serAddr));
ERROR_CHECK(ret, -1, "connect");
printf("\nconnext server\n*******\n");
int epfd = epoll_create(2333);
struct epoll_event events, eves[2];
events.data.fd = STDIN_FILENO;
events.events = EPOLLIN;
epoll_ctl(epfd, EPOLL_CTL_ADD, STDIN_FILENO, &events);
events.data.fd = sfd;
epoll_ctl(epfd, EPOLL_CTL_ADD, sfd, &events);
int readyNum;
char buf[128] = {0};
while(1){
memset(eves, 0, sizeof(eves));
readyNum = epoll_wait(epfd, eves, 2, -1);
for(int i = 0; i < readyNum; ++i){
if(eves[i].data.fd == STDIN_FILENO){
memset(buf, 0, sizeof(buf));
read(STDIN_FILENO, buf, sizeof(buf) - 1);
send(sfd, buf, strlen(buf), 0);
}
if(eves[i].data.fd == sfd){
memset(buf, 0, sizeof(buf));
ret = recv(sfd, buf, sizeof(buf) - 1, 0);
if(ret == 0){
close(sfd);
printf("\na connect break\n*******\n");
int flag=5;
for(int j = 0; j < 10; ++j){
sleep(5);
printf("%d\n",flag);
sfd = socket(AF_INET, SOCK_STREAM, 0);
printf("sfd1=%d\n",sfd);
flag = connect(sfd, (struct sockaddr*)&serAddr, sizeof(serAddr));
events.events = EPOLLIN;
events.data.fd = sfd;
epoll_ctl(epfd, EPOLL_CTL_ADD, sfd, &events);
ERROR_CHECK(flag,-1,"connect");
printf("%d\n",flag);
if(flag == -1){
printf("\nNo.%d times connect server fail\n*******\n", j + 1);
}
else{
printf("\nconnect server again\n*******\n");
break;
}
}
if(flag == -1){
printf("\nserver problem\n*******\n");
return -1;
}
else{
continue;
}
}
printf("\nfrom server: %s", buf);
}
}
}
return 0;
}
"server.c"
#include<func.h>
#define N 10
int main(int argc,char*argv[])
{
ARGS_CHECK(argc, 3);
int sfd = socket(AF_INET, SOCK_STREAM, 0);
printf("sfd=%d\n",sfd);
int opt = 1;
setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(int));
struct sockaddr_in serAddr;
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(atoi(argv[2]));
serAddr.sin_addr.s_addr = inet_addr(argv[1]);
int ret = bind(sfd, (struct sockaddr *)&serAddr, sizeof(serAddr));
ret = listen(sfd, N);
printf("success\n");
int epfd = epoll_create(2333);
struct epoll_event events, eves[2];
events.data.fd = STDIN_FILENO;
events.events = EPOLLIN;
epoll_ctl(epfd, EPOLL_CTL_ADD, STDIN_FILENO, &events);
events.data.fd = sfd;
epoll_ctl(epfd, EPOLL_CTL_ADD, sfd, &events);
int clifd = 0;
int readyNum;
char buf[128] = {0};
while(1){
printf("dd\n");
printf("sfd1=%d\n",sfd);
memset(eves, 0, sizeof(eves));
readyNum = epoll_wait(epfd, eves, 2, -1);
printf("eee\n");
for(int i = 0; i < readyNum; ++i){
if(eves[i].data.fd == STDIN_FILENO){
memset(buf, 0, sizeof(buf));
read(STDIN_FILENO, buf, sizeof(buf) - 1);
send(clifd, buf, strlen(buf), 0);
}
if(eves[i].data.fd == clifd){
memset(buf, 0, sizeof(buf));
ret = recv(clifd, buf, sizeof(buf) - 1, 0);
if(ret == 0){
close(clifd);
printf("\na connect break\n*******\n");
continue;
}
printf("\nfrom client: %s", buf);
}
if(eves[i].data.fd == sfd){
printf("zzz\n");
clifd = accept(sfd, NULL, 0);
printf("sss\n");
events.data.fd = clifd;
epoll_ctl(epfd, EPOLL_CTL_ADD, clifd, &events);
printf("\na client connected\n*******\n");
}
}
}
return 0;
}