【UNIX】網絡編程/多路複用IO服務器編碼

服務器端:

#include
#include
#include
#include
#include
#include
#include
#include

#define MAXLEN 100
typedef struct sockaddr SA;

int main ()
{
	int nr;
	int listenfd,connfd,maxfd,i,nbyte;
	char buf[MAXLEN];
	struct sockaddr_in servaddr,cliaddr;
	socklen_t clilen;
	fd_set global_rdfs,current_rdfs;

	if ((listenfd = socket(AF_INET,SOCK_STREAM,0)) < 0){
		perror("socket");
		exit(-1);
	}

	bzero(&servaddr,sizeof(servaddr));
	servaddr.sin_family      = AF_INET;
	servaddr.sin_addr.s_addr = INADDR_ANY;
	servaddr.sin_port        = htons(8888);

	if (bind(listenfd,(SA*)&servaddr,sizeof(servaddr)) < 0){
		perror("bind");
		exit(-1);
	}

	listen(listenfd,5);
	FD_ZERO(&global_rdfs);
	FD_SET(listenfd,&global_rdfs);
	maxfd = listenfd;

	while(1){
		current_rdfs = global_rdfs;
		if (select(maxfd+1,&current_rdfs,NULL,NULL,0)<0){
			perror("select");
			exit(-1);
		}else {
			for(i = 0;i<= maxfd;i++){
				if (FD_ISSET(i,&current_rdfs)){
					if(i == listenfd){
						connfd = accept(listenfd,NULL,NULL);
						FD_SET(connfd,&global_rdfs);
						maxfd = maxfd>connfd?maxfd:connfd;
					}else{
						if ((nbyte = recv(i,buf,sizeof(buf),0)) < 0){
							close(i);
							FD_CLR(i,&global_rdfs);
						}else{
							send(i,buf,sizeof(buf),0);
						}
					}
				}
			}
			
		}

	}	
	return 0;
}

#

客戶端

#include
#include
#include
#include
#include
#include
#include
#include

#define MAXLEN 100
typedef struct sockaddr SA;

int main (int argc,char *argv[])
{
	int sockfd,nbyte;
	socklen_t clilen;
	struct sockaddr_in servaddr,cliaddr;
	char buf[MAXLEN];

	if((sockfd = socket(AF_INET,SOCK_STREAM,0)) <0){
		perror("sockfd");
		exit(-1);
	}
	memset(&servaddr,0x00,sizeof(servaddr));
	servaddr.sin_family      = AF_INET;
	servaddr.sin_addr.s_addr = INADDR_ANY;
	servaddr.sin_port        = htons(8888);

	if (connect(sockfd,(SA*)&servaddr,sizeof(servaddr))< 0){
		perror("conncet");
		exit(-1);
	}
	
	do
	{
		fgets(buf,MAXLEN,stdin);
		
		write(sockfd,buf,MAXLEN);
		
		memset(buf,0,sizeof(buf));
		
		read(sockfd,buf,MAXLEN);
		printf("this is client recv read :%s\n",buf);
		
	}while(strncmp(buf,"quit",4) != 0);
	
	close(sockfd);

	return 0;

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章