Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement