#include <stdio.h>
#include <sys/epoll.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <errno.h>
#define MAXLINE 1024
#define OPEN_MAX 100
#define LISTENQ 20
#define SERV_PORT 5000
#define INFTIM 1000
int main()
{
/*
int sockfd,connfd;
socklen_t len;
struct sockaddr_in servAddr,clientAddr;
bzero(&servAddr,sizeof(struct sockaddr_in));
servAddr.sin_family=AF_INET;
servAddr.sin_port=htonl(200000);
servAddr.sin_addr.s_addr=htonl(ANADDR_ANY);
if(inet_pton(AF_INET,"192.168.66.111",&servAddr.sin_addr)<=0)
{
printf("inet_pton error for 192.168.66.111\n");
exit(0);
}
*/
int sockfd,connfd,epollfd,nfds,i;
struct sockaddr_in my_addr;
char buff[MAXLINE];
struct epoll_event ep_event,listenEvent[20];
// sockfd = socket(AF_INET,SOCK_STREAM,0);//创建基于六套接字
my_addr.sin_family = AF_INET; //IPv4协议族
my_addr.sin_port = htons(9999);//端口转换
my_addr.sin_addr.s_addr = (inet_addr("192.168.66.111"));
bzero(&(my_addr.sin_zero),0);
sockfd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sockfd==-1)
{
printf("create sockfd is failed,Error Reason is :%s\n",strerror(errno));
exit(0);
}
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(my_addr))==-1)
{
printf("bind sockfd is failed,Error Reason is :%s\n",strerror(errno));
exit(0);
}
if(listen(sockfd,10)==-1)
{
printf("listen sockfd is failed,Error Reason is :%s\n",strerror(errno));
exit(0);
}
epollfd=epoll_create(256);
ep_event.events=EPOLLIN|EPOLLET;
ep_event.data.fd=sockfd;
epoll_ctl(epollfd,EPOLL_CTL_ADD,sockfd,&ep_event);
while(1)
{
nfds=epoll_wait(epollfd,listenEvent,20,500);
printf("waiting for condition coming>>>>>>>>condition is [%d]\n",nfds);
for(i=0;i<nfds;i++)
{
printf("pre for<><><><>[%d]<>",i);
if(listenEvent[i].data.fd==sockfd)
{
printf("start listen>>>>>>>>>>>>>>>>>>>>>\n");
if((connfd=accept(sockfd,(struct sockaddr *)NULL,NULL))==-1)
{
printf("accept sockfd is failed,Error Reason is :%s\n",strerror(errno));
continue;
}
printf("ep_event value<><><><><>");
ep_event.data.fd=connfd;
ep_event.events=EPOLLIN|EPOLLET|EPOLLOUT;
printf("pre epoll_ctl value<><><><><>");
epoll_ctl(epollfd,EPOLL_CTL_ADD,connfd,&ep_event);
printf("epoll_ctl value<><><><><>");
}
else if(listenEvent[i].events&&EPOLLIN)
{
printf("pre red<><><><>[%d]<>",i);
if((connfd=listenEvent[i].data.fd)<0)
{
continue;
}
printf("read value<><><><><>");
if((read(connfd,buff,MAXLINE))<0)
{
if(errno==ECONNABORTED)
{
close(connfd);
listenEvent[i].data.fd=-1;
}
}
printf("send value<><><><><>");
if(send(connfd,buff,sizeof(buff),0)<0)
{
printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
continue;
}
printf("receive value is:%s\n",buff);
}
}
}
close(epollfd);
return 0;
/*
if(fork()==0)
{
int n;
while(1)
{
printf("wait read for data coming!\n");
n=recv(connfd,buff,sizeof(buff),0);
printf("receive data :%s,length=%d\n",buff,n);
printf("send data to client!\n");
send(connfd,buff,n,0);
}
sleep(1);
close(connfd);
exit(0);
}
else
{
close(connfd);
}
}
*/
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <errno.h>
#include <arpa/inet.h>
#define MAXLINE 1024
int main(void)
{
int sockfd,n;
char recvline[MAXLINE],sendline[MAXLINE];
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET; //IPv4协议族
my_addr.sin_port = htons(9999);//端口转换
my_addr.sin_addr.s_addr = (inet_addr("192.168.66.111"));
bzero(&(my_addr.sin_zero),0);
if((sockfd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)
{
printf("create sockfd is failed,Error Reason is :%s\n",strerror(errno));
exit(0);
}
if(connect(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
{
printf("connect sockfd is failed,Error Reason is :%s\n",strerror(errno));
exit(0);
}
printf(">>>>>>communication start<<<<<<<<<<\n");
while(1)
{
printf("send message is:\n");
if(send(sockfd,"hello parent !",sizeof(sendline),0)<0)
{
continue;
}
gets(sendline);
if(send(sockfd,sendline,sizeof(sendline),0)<0)
{
printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
continue;
}
//printf("send message to server successed!\n");
if(recv(sockfd,recvline,sizeof(recvline),0)<0)
{
printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
continue;
}
printf("parent: %s\n",recvline);
}
close(sockfd);
}