Guest User

client.c

a guest
Jan 5th, 2011
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.98 KB | None | 0 0
  1. #define _GNU_SOURCE
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5. #include <arpa/inet.h>
  6. #include <unistd.h>
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <ctype.h>
  11. #define BUF 1024
  12. #define PORT 6543
  13.  
  14. int main (int argc, char **argv) {
  15.   int create_socket;
  16.   char buffer[BUF];
  17.   struct sockaddr_in address;
  18.   int size;
  19.   int err = 0;
  20.   char port_to_int[BUF]; //Umwandlung in integer (bei Porteingabe)
  21.   int count; //variable um zum nästen zeichen zu kommen
  22.   int strsize, lines;
  23.  
  24.   //Eingabe der Argumente ServerIP & Port
  25.   if( argc < 3 ){
  26.              printf("Usage: %s ServerAdresse Port\n", argv[0]);
  27.              exit(EXIT_FAILURE);
  28.       }
  29.   //Port in Integer umwandeln
  30.       strcpy(port_to_int,argv[2]);
  31.       for(count=0;count<(int)strlen(port_to_int);count++)
  32.       {
  33.         if(!isdigit(port_to_int[count]))
  34.         {
  35.             err++;
  36.         }
  37.      }
  38.      if(err > 0)
  39.       {
  40.         printf("Nur Zahlen beim Port eingeben\n");
  41.         exit(EXIT_FAILURE);
  42.       }
  43.       //PORT = atoi(port_to_int);
  44.  
  45.   //Socket oeffnen
  46.   if ((create_socket = socket (AF_INET, SOCK_STREAM, 0)) == -1)
  47.   {
  48.      perror("Socket error");
  49.      return EXIT_FAILURE;
  50.   }
  51.   //Serveradresse initialisieren
  52.   memset(&address,0,sizeof(address));
  53.   address.sin_family = AF_INET;
  54.   address.sin_port = htons (PORT);
  55.   inet_aton (argv[1], &address.sin_addr);
  56.  
  57.   //Verbinden
  58.   if (connect ( create_socket, (struct sockaddr *) &address, sizeof (address)) == 0)
  59.   {
  60.      printf ("Erfolgreich mit Server %s verbunden. Port: %d\n", inet_ntoa (address.sin_addr), PORT);
  61.      size=recv(create_socket,buffer,BUF-1, 0);
  62.      if (size>0)
  63.      {
  64.         buffer[size]= '\0';
  65.         printf("%s",buffer);
  66.      }
  67.   }
  68.   else
  69.   {
  70.      perror("Connect error - no server available");
  71.      return EXIT_FAILURE;
  72.   }
  73.  
  74.   do {
  75.      //printf ("Send message: ");
  76.      fgets (buffer, BUF, stdin);
  77.  
  78.     if(strcmp(buffer,"LIST\n") == 0)
  79.     {
  80.         //LIST Befehl an server üagen
  81.         send(create_socket, buffer, strlen (buffer), 0);
  82.         //Antwort vom Server
  83.         size = recv(create_socket, &lines, sizeof(int), 0);
  84.  
  85.         if (size < 4)
  86.             lines = 0;
  87.  
  88.         for (; lines; --lines)
  89.         {
  90.             size = recv(create_socket, &strsize, sizeof(strsize), 0);
  91.             if (size > 0)
  92.             {
  93.                 size=recv(create_socket,buffer,strsize, 0);
  94.                 if (size>0)
  95.                 {
  96.                     buffer[size] = '\0';
  97.                    printf("%s", buffer);
  98.                 }
  99.             }
  100.          }
  101.     }
  102.     else if(strcmp(buffer,"GET\n") == 0)
  103.     {
  104.         //GET command to the server
  105.         send(create_socket, buffer, strlen (buffer), 0);
  106.  
  107.          }
  108.     else
  109.     {
  110.         printf("Es werden nur folgende Befehle erkannt: LIST, GET und QUIT\nBitte erneut versuchen\n");
  111.     }
  112.   }while (strcmp (buffer, "QUIT\n") != 0);
  113.   close (create_socket);
  114.   return EXIT_SUCCESS;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment