piffy

TCP client (C)

Aug 6th, 2015
325
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <netdb.h>
  9.  
  10. #define BUFFER_SIZE 1024
  11. void on_error(char *s) { fprintf(stderr,"%s\n",s); fflush(stderr); exit(1); }
  12.  
  13. int main(int argc, char **argv) {
  14.     int client_fd, porta, n;
  15.     struct sockaddr_in serveraddr;
  16.     struct hostent *server;
  17.     char *hostname;
  18.     char buf[BUFFER_SIZE];
  19.  
  20.     /** Controllo linea di comando **/
  21.     if (argc != 3) {on_error("Uso: tcp_client [hostname] [porta]\n"); }
  22.     hostname = argv[1];
  23.     porta = atoi(argv[2]);
  24.  
  25.     /* Crea il socket */
  26.     client_fd = socket(AF_INET, SOCK_STREAM, 0);
  27.     if (client_fd < 0)
  28.         on_error("Non riesco a creare il socket");
  29.  
  30.     /* Trasformare il nome host nel numero IP */
  31.     server = gethostbyname(hostname);
  32.     if (server == NULL) { on_error("Errore DNS"); }
  33.  
  34.     /* Costruire l'indirizzo Internet del server */
  35.     bzero((char *) &serveraddr, sizeof(serveraddr));
  36.     serveraddr.sin_family = AF_INET; /** Famiglia internet **/
  37.     bcopy((char *)server->h_addr,
  38.       (char *)&serveraddr.sin_addr.s_addr, server->h_length);
  39.     serveraddr.sin_port = htons(porta); /** Porta **/
  40.  
  41.     /* Crea una connessione con il server */
  42.     if (connect(client_fd, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0)
  43.       on_error("Non riesco a connettermi");
  44.  
  45.     /* Leggi un messaggio dall'utente */
  46.     printf("Scrivi il messaggio: ");
  47.     bzero(buf, BUFFER_SIZE);
  48.     fgets(buf, BUFFER_SIZE, stdin);
  49.  
  50.     /* Invia il messaggio al server */
  51.     n = write(client_fd, buf, strlen(buf));
  52.     if (n < 0)
  53.       on_error("Non riesco al scrivere sul socket");
  54.  
  55.     /* Stampa la risposta del server */
  56.     bzero(buf, BUFFER_SIZE);
  57.     n = read(client_fd, buf, BUFFER_SIZE);
  58.     if (n < 0)
  59.       on_error("Non riesco a leggere dal socket");
  60.     printf("Risposta del server: %s", buf);
  61.     close(client_fd);
  62.     return 0;
  63. }
RAW Paste Data