/**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
0 B
|👍
/👎
0 B
|👍
/👎