server.c

来自「Linux下server与client的通信实现。Server支持多线程。附有m」· C语言 代码 · 共 89 行

C
89
字号
/* A simple server in the internet domain using TCP   The port number is passed as an argument */#include <stdio.h>#include <sys/types.h> #include <sys/socket.h>#include <netinet/in.h>#include <firewall.h>#include <server.h>#include <stdlib.h>#include <string.h>#include <unistd.h>struct FirewallConfig *firewallTable = NULL; /* global table */void error(char *msg){    perror(msg);    exit(1);}int main(int argc, char *argv[]){     int sockfd, newsockfd, portno;     socklen_t clilen;     int errno;     char buffer[BUFFERLENGTH];     char result;     struct sockaddr_in serv_addr, cli_addr;     int n;     if (argc < 2) {         fprintf(stderr,"ERROR, no port provided\n");         exit(1);     }     sockfd = socket(AF_INET, SOCK_STREAM, 0);     if (sockfd < 0)         error("ERROR opening socket");     bzero((char *) &serv_addr, sizeof(serv_addr));     portno = atoi(argv[1]);     serv_addr.sin_family = AF_INET;     serv_addr.sin_addr.s_addr = INADDR_ANY;     serv_addr.sin_port = htons(portno);     if (bind(sockfd, (struct sockaddr *) &serv_addr,              sizeof(serv_addr)) < 0)               error("ERROR on binding");     listen(sockfd,5);     clilen = sizeof(cli_addr);     while (1) {       newsockfd = accept(sockfd, 			  (struct sockaddr *) &cli_addr, 			  &clilen);       if (newsockfd < 0) 	 error("ERROR on accept");       bzero(buffer, BUFFERLENGTH);       n = read(newsockfd,buffer, BUFFERLENGTH -1);       if (n < 0) 	 error("ERROR reading from socket");       switch (buffer[0]) {       case ADD_RULE:	 firewallTable = addRule (buffer + 1, firewallTable, &errno);	 buffer[0] = errno;	 n  = write (newsockfd, buffer, 1);	 if (n < 0) 	   error ("Error writing to socket");	 break;       case SHOW_TABLE:	 showTable (firewallTable);	 break;       case CHECK_ENTRY:	 result = checkEntry (buffer +1, firewallTable, &errno);	 if (errno != 0) {	   buffer[0] = errno;	 }	 else {	   buffer[0] = result;	 }	 n  = write (newsockfd, buffer, 1);	 if (n < 0) 	   error ("Error writing to socket");	 break;       default:	 fprintf (stderr, "Illegal request received: %c\n", buffer[0]);       }       close (newsockfd);     }     return 0; }

⌨️ 快捷键说明

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