⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.c

📁 为一个单进程循环的c/s服务器
💻 C
字号:
/****************************************************************************    Copyright (C) 2006 by Soasen Co.,Ltd.   **    desc: 单进程循环服务器*    座友铭:凡是程序当前不需要的,都是垃圾,80%的时间做20%的事情。(程序的效率)*                                                                         ****************************************************************************/#include	<sys/types.h>#include	<sys/socket.h>#include	<netinet/in.h>#include	<arpa/inet.h>#include	<netdb.h>#include	<stdio.h>#include	<unistd.h>#include	<errno.h>#include	<string.h>#include	<pthread.h>#include     	<malloc.h>#include 	<stdlib.h>#define  BACKLOG 5#define  MAXDATASIZE 1000#define  PORT 1234void process_cli(int,sockaddr_in);int main(int argc,char *argv[])	//需要一个参数 端口号{	int	listenfd,				//监听套接字sock		connectfd;				//accept 收到的 新套接字	struct sockaddr_in	servAddr,	//服务器地址				cliAddr;		//客户端地址	socklen_t	adrlen;			//sockaddr地址长度	int		servPort;			//服务器监听端口号	//获得服务器监听的端口号	if(argc!=2)	{		printf("Usage:%s portnumber\a\n",argv[0]);		return 1;	}	if((servPort=atoi(argv[1]))<0)	{		printf("Usage:%s portnumber\a\n",argv[0]);		return 1;	}	/* 服务器端开始建立socket描述符 */	if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1)	{		fprintf(stderr,"Socket error:%s\n\a",strerror(errno));		return 1;	}	/*设置套接字地址结构体servAddr中的参数,绑定服务器端口号*/	servAddr.sin_family=AF_INET;	servAddr.sin_addr.s_addr=htonl(INADDR_ANY);	servAddr.sin_port=htons(servPort);	if(bind(listenfd,(struct sockaddr *)&servAddr,sizeof(servAddr))<0)	{		printf("Bind error:%s\n\a",strerror(errno));		exit(2);	}	/* 监听sockfd描述符 */	if(listen(listenfd,BACKLOG)==-1)	{		printf("Listen error:%s\n\a",strerror(errno));		exit(3);	}	while(1)	{		printf("%s:waiting for data on port TCP %u\n",argv[0],servPort);		adrlen=sizeof(struct sockaddr_in);		connectfd=accept(listenfd,(struct sockaddr *)&cliAddr,&adrlen);		if(connectfd<0)		{			perror("accetp() error\n");			exit(4);		}		process_cli(connectfd,cliAddr);	}}void process_cli(int connectfd, sockaddr_in client){	int num;	char sendbuf[MAXDATASIZE],revbuf[MAXDATASIZE];	printf("You get a connetion from %s\n",inet_ntoa(client.sin_addr));	while((num=recv(connectfd,revbuf,MAXDATASIZE,0))){	revbuf[num]='\0';	printf("Receive client message: %s", revbuf);	for(int i=0;i<num-1;i++){	sendbuf[i]=revbuf[num-i-2];	}	sendbuf[num-1]='\0';	send(connectfd,sendbuf,strlen(sendbuf),0);	}	close(connectfd);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -