piffy icon

TCP client (C++/Win)

piffy | PRO | 08/06/15 06:53:33 AM UTC | 0 ⭐ | 10934 👁️ | Never ⏰ | []
C++ (WinAPI) |

0 B

|

None

|

0 👍

/

0 👎

/**Copyright (c) 2015 Mathias Buus, Marcello Missiroli & Remy Lebeau */
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
 
#define BUFFER_SIZE 1024
 
void on_error(const char *s, int *errCode = NULL)
{
    int err = (errCode) ? *errCode : WSAGetLastError();
    fprintf(stderr, "%s: %d\n", s, err);
    fflush(stderr);
    WSACleanup();
    scanf("%d",errCode);
    exit(1);
}
 
int main(int argc, char *argv[])
{
    WSADATA wsadata; 
    int client_fd, porta=6666, n, err;
    struct sockaddr_in serveraddr;
    struct hostent *server;
    char hostname[BUFFER_SIZE] = "localhost";
    char buf[BUFFER_SIZE];
   
    /** Controllo linea di comando **/
    if (argc > 3) on_error("Uso: tcp_client [hostname] [porta]\n"); 
    if (argc > 2) porta = atoi(argv[2]);
    if (argc > 1) strcpy(hostname, argv[1]); 
    
    /** Inizializzazione Winsock **/
    err = WSAStartup(MAKEWORD(2,2), &wsadata);
    if (err != 0)
        on_error("Errore in WSAStartup", &err);
 
        /* Crea il socket */
    client_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (client_fd < 0) 
        on_error("Non riesco a creare il socket");
 
    /* Trasformare il nome host nel numero IP */
    server = gethostbyname(hostname);
    if (server == NULL) { on_error("Errore DNS"); }
 
    /* Costruire l'indirizzo Internet del server */
    memset( &serveraddr, 0,sizeof(serveraddr));
    serveraddr.sin_family = AF_INET; /** Famiglia internet **/
    memcpy(
      (char *)&serveraddr.sin_addr.s_addr,
      (char *)server->h_addr, 
      server->h_length);
    serveraddr.sin_port = htons(porta); /** Porta **/
 
    /* Crea una connessione con il server */
    if (connect(client_fd, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0) 
      on_error("Non riesco a connettermi");
 
    /* Leggi un messaggio dall'utente */
    printf("Scrivi il messaggio: ");
    memset(buf, 0, BUFFER_SIZE);
    fgets(buf, BUFFER_SIZE, stdin);
 
    /* Invia il messaggio al server */
    n = send(client_fd, buf, strlen(buf),0);
    if (n < 0) 
      on_error("Non riesco al scrivere sul socket");
 
    /* Stampa la risposta del server */
    memset(buf, 0, BUFFER_SIZE);
    n = recv(client_fd, buf, BUFFER_SIZE,0);
    if (n < 0) 
      on_error("Non riesco a leggere dal socket");
    printf("Risposta del server: %s", buf);
 
    WSACleanup();
    closesocket(client_fd);
    return 0;
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎