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

📄 addrule.c

📁 Linux下server与client的通信实现。Server支持多线程。附有makefile可供编译。Linux下调试通过。
💻 C
字号:
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h> #include <stdlib.h>#include <string.h>#include <unistd.h>#include <firewall.h>void error(char *msg){    perror(msg);    exit(0);}int main(int argc, char *argv[]){    int sockfd, n;    struct sockaddr_in serv_addr;    struct hostent *server;    char *position;    int count, tmp;    int portno;    char *endptr;    if (argc < 3) {      fprintf (stderr, "usage: %s hostname port configuration line \n", argv[0]);      exit (1);    }        portno = strtol (argv[2],  &endptr, 10);    if ((portno == 0 ) || (endptr == NULL) || (*endptr != '\0')) {      fprintf (stderr, "%s: invalid port number!\n", argv[0]);      exit (1);    }    char buffer[BUFFERLENGTH];    sockfd = socket(AF_INET, SOCK_STREAM, 0);    if (sockfd < 0)         error("ERROR opening socket");    server = gethostbyname(argv[1]);    if (server == NULL) {        fprintf(stderr,"ERROR, no such host\n");        exit(0);    }    bzero((char *) &serv_addr, sizeof(serv_addr));    serv_addr.sin_family = AF_INET;    bcopy((char *)server->h_addr,          (char *)&serv_addr.sin_addr.s_addr,         server->h_length);    serv_addr.sin_port = htons(portno);    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)         error("ERROR connecting");    /* Now fill the buffer with the arguments */        bzero(buffer,BUFFERLENGTH);    position = buffer;    /* skip program name */    argc = argc - 3;    argv += 3;    /* put command in first character */    buffer[0] = ADD_RULE;    count = BUFFERLENGTH - 2;    position = buffer + 1;        while (argc) {      tmp = strlen (*argv);      if (tmp > count) {	fprintf (stderr, "Maximal string length exceeded!\n");	exit (1);      }      position = memcpy (position, *argv, tmp);      position += tmp;            argc --;      argv ++;            count = count - tmp;    }        /* add the final null character */    *position = '\0';    position++;    printf ("Writing data to socket: %s\n", buffer);    n = write (sockfd, buffer, position - buffer);    if (n < 0)          error("ERROR writing to socket");    bzero (buffer, BUFFERLENGTH);    /* wait for reply */    n = read (sockfd, buffer, BUFFERLENGTH -1);    if (n < 0)          error("ERROR reading from socket");        switch (buffer[0]) {    case ILLEGAL_IP_ADDRESS:      printf ("Illegal IP-address \n");      exit (1);    case ILLEGAL_UID:      printf ("Illegal user name \n");      exit (1);    case ILLEGAL_PORT:        printf ("Illegal port name \n");      exit (1);    case ILLEGAL_PROGRAM:        printf ("Illegal program \n");      exit (1);    case OK:      break;    default:      error ("Illegal return value from server!");    }    /*     printf ("Rule successfully added \n");*/    return 0;}

⌨️ 快捷键说明

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