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

📄 showtable.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>#define TRUE 1#define FALSE 0void error(char *msg){    perror(msg);    exit(0);}char *readfromSocket (int sockfd, char *buffer, int length) {  static int outstanding = 0;  static char *pos;  char *tmp;  while (1) {        if (outstanding == 0) {      bzero (buffer, length);      outstanding = read (sockfd, buffer, BUFFERLENGTH);      printf ("Reading %d characters from socket: %s\n", outstanding, buffer);      if (outstanding < 0) 	error("ERROR reading from socket");      pos = buffer;    }    if (outstanding == 0) {	perror ("Reading results failed.\n");      }      while ((*buffer != '\0') && (outstanding > 0)) {	outstanding--;	buffer++;      }      if (*buffer == '\0') {	outstanding--;	buffer++;	tmp = pos;	pos = buffer;	return tmp;      }	  }  /* NOT REACHED */}void printResult (char command, char *output, char *buffer) {  if (buffer[0] != command) {    fprintf (stderr, "Expected part %c, got %c", command, buffer[0]);    exit (1);  }  printf (output);  printf ("%s\n", &(buffer[1]));}int main(int argc, char *argv[]){    int sockfd, n;    struct sockaddr_in serv_addr;    struct hostent *server;    char * position;    char *endptr;    int count, tmp, portno;        if (argc != 3) {      fprintf (stderr, "usage: %s hostname port \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 --;    argv ++;    /* put command in first character */    buffer[0] = SHOW_TABLE;    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++;    n = write (sockfd, buffer, position - buffer);    if (n < 0)          error("ERROR writing to socket");    return 0;}

⌨️ 快捷键说明

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