Sistemi di elaborazione dell'informazione / Reti

Esempio Socket Server in C

/* file server_i.c */
/* Implementazione di server iterativo */

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>

#define Max 8000

int main(void) {
char buff[Max];
struct sockaddr_in server;
struct sockaddr_in client;
int sd, temp_sd;
int address_size;
unsigned short port = 9000;

/* Creiamo il socket e riempiamo i campi della struttura server */

if ( (sd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
printf("Errore nella craazione del server!\n");

server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr.s_addr = INADDR_ANY; //indirizzo jolly

/* assegnamo al socket un processo tramite la funzione BIND */

if (bind(sd, (struct sockaddr *)&server, sizeof(server)) < 0)
printf("Errore nella chiamata di sistema BIND!\n");

/* Mettiamolo in ascolto */

listen (sd, 20);

/* il nostro č un socket bloccante, secondo
* quanto esposto in precedenza, quindi
* non occorre un gestione troppo oculata
* delle connessioni infatti....*/

while(1) {
if ((temp_sd= accept(sd, (struct sockaddr *)&client, &address_size)) < 0)
printf("Errore nella chiamata ACCEPT\n");

/*Riceviaimo i dati dal client */

recv(temp_sd, buff, sizeof(buff), 0);
printf("Dati ricevuti : %s", buff);

/* Spediamo qualcosa */

strcpy(buff, "Tutto OK!");
send(temp_sd, buff, strlen(buff), 0);

close(temp_sd);
}
return EXIT_SUCCESS;
}





















































Tutto quanto riportato in questa pagina č a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione č fondamentale per la continua crescita del sito.