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

📄 socket_server.c

📁 scounix编译通过,c/s完整实现
💻 C
字号:
/*	Exam:测试c/s模式的功能*/#include	<stdio.h>#include	<fcntl.h>#include	<netinet/in.h>#include	<arpa/inet.h>#include	<sys/types.h>#include	<sys/socket.h>#include 	<string.h>static		void	err_dump(char *) ;static		int	sockfd ;		/* 后台原始的socket_fd */static		int	newsockfd ;		/* 后台创建用来与前台通信的 */#define		SERV_TCP_PORT 6000   		/* 定义服务器的PORT端口 */#define		MAXDL         10		/* 建立最大的请求队列的个数 */#define		maxnum	      9999struct csjym {	char  jym[7] ;	char  wjm[21] ;}csjymm[15] ;void main(int argc, char *argv[]){	int	client, n , num ;	pid_t	pid;	FILE    *fp, *fp1 ;	char	temp[100] , *cli_addr_str ;	char    up[maxnum], down[maxnum], jym[7];	ushort 	cli_port , flag ;	struct 	sockaddr_in 	serv_addr, cli_addr ;	bzero((char*)&cli_addr,	sizeof(cli_addr)) ;	bzero((char*)&serv_addr,	sizeof(serv_addr)) ;	for ( num= 0 ; num < 15 ; num++)	{		bzero(&csjymm[num] ,sizeof(struct csjym)) ; 	}		if ( (fp1 = fopen("jym.txt", "r")) == NULL)	{		printf( "open File Error.\n" ) ;		exit(1) ;	}	num = 0 ;	while( fgets(temp,90,fp1) != NULL)	{		strncpy(csjymm[num].jym, temp , 6) ; 		printf("jym= %s" ,csjymm[num].jym);		strncpy(csjymm[num].wjm, temp+6 , 20) ; 		csjymm[num].wjm[6]='\0' ;		printf("wjm= %s\n" ,csjymm[num].wjm);		num++ ;		if ( num  > 14 )		{			break ;		}	}		fclose(fp1) ;	/* 建立socket文件描述符 */	if( (sockfd=socket(AF_INET, SOCK_STREAM, 0)) < 0 )		printf( "Socket Error.\n" ) ;	/* 配置地址结构serv_addr */	/* 指明socket的数据传送端口地址 */	serv_addr.sin_family          = AF_INET ;	serv_addr.sin_addr.s_addr     = htonl( INADDR_ANY ) ;	serv_addr.sin_port            = htons( SERV_TCP_PORT ) ;	if( bind(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) < 0 ) {		err_dump( "Server:Bind Error." ) ;		exit( 1 ) ;	}	/* 接收前台发生的请求,并将请求输入到一个队列中 */	listen(sockfd, MAXDL) ;	for ( ; ; ) {		bzero(up,sizeof(up)) ;		bzero(down,sizeof(down)) ;		bzero(jym,sizeof(jym)) ;		client = sizeof(cli_addr) ;		newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr,\		 &client) ;		/* 等待客户进程的连接请求 */		if( newsockfd<0 ) {			printf( "Server:Accept Error.\n" ) ;		}				if ( newsockfd >= 0 )		{			pid = fork() ;			if ( pid == 0 ) 			{				/* 读入客户进程传送的数据 */				n = read(newsockfd, up, maxnum ) ;				printf(" up = %s|%d",up,n) ;				if ( n >= 0 )					{				strncpy(jym, up, 6);					jym[6] = '\0' ;				printf("num1=%d, jym1 = %s\n",num,jym);				for ( num=0 ; num < 15 ; num++)					{				printf("num2=%d, jym = %s\n",num,jym);					flag = strncmp(jym, csjymm[num].jym,6) ;				printf("num=%d, jym = %s\n",num,jym);					if ( flag == 0 )					{				printf("num=%d, csjymm[num].wjm = %s\n",num,csjymm[num].jym);						break ;					}				}								printf("num=%d, jym = %s\n",num,jym);				if ( num < 15 )						{				 if ((fp=fopen(csjymm[num].wjm,"r"))==NULL)				//   if ((fp=fopen("cx.txt","r"))==NULL)				   {					printf( "Read File %d|%s Error.\n", \					fp, csjymm[num].wjm ) ;				        strcpy(down,"888888|服务器端处理错误") ;				   } else {					   fgets(down,9999, fp ) ;					   fclose(fp) ;				   }				}else{				    strcpy(down,"999999|无此交易码") ;				}				}else{				    strcpy(down,"888888|服务器端处理错误") ;				}								n = strlen(down) ; 				printf(" down = %s|%d",down,n) ;				/* 发送回应信息 */				write(newsockfd, down, n) ;								/* 关闭与前台的连接 */				close( newsockfd ) ;				exit(0) ;			}else if( pid > 0 ) {				close( newsockfd ) ;			}		}	}}void err_dump(char *string) {	printf("%s\n", string) ;	perror( "System Error Message:" ) ;	close( sockfd ) ;	return ; }

⌨️ 快捷键说明

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