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

📄 server.c

📁 Linux下server与client的通信实现。Server支持多线程。附有makefile可供编译。Linux下调试通过。
💻 C
字号:
/* 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -