Ricerca con Ubuntiani Blog

venerdì 2 gennaio 2009

Server TCP

Oggi pubblicherò un post un po diverso infatti scriverò il codice per creare un semplice e alquanto poco "avanzato" server per connessioni TCP. In futuro pubblicherò poi un relativo client, apporterò migliorie sia al server che al client sino ad ottenere un modello, che seppur semplificato, possa essere di qualche utilità didattica.

Il codice del server_tcp è il seguente:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define QUEUE_LEN 20
#define BUFF_SIZE 20

int main(int argc, char* argv[])
{
int sk; /* Socket per la comunicazione del server */
int client; /* Socket per la comunicazione con il client */
int ret; /* Ritorno delle funzioni */
int len; /* Dimensione strutture dati */
struct sockaddr_in s_addr; /* Indirizzo Server */
struct sockaddr_in c_addr; /* Indirizzo Client */

char buffer[BUFF_SIZE]; /* Buffer di Invio/Ricezione dati */

int port = 2001; /* Porta del Server */
char address[] = "127.0.0.1"; /* Indirizzo IP del Server */

/* Creazione del socket */
sk = socket(AF_INET, SOCK_STREAM, 0);
if (sk < 0) return -1;

/* Inizializzazione indirizzo del Server */
bzero(&s_addr, sizeof(s_addr));
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(port);
s_addr.sin_addr.s_addr = htonl(INADDR_ANY);

/* Bind del socket */
ret = bind(sk, (struct sockaddr*) &s_addr, sizeof(s_addr) );
if (ret < 0) return -1;

/* Creazione coda di richieste di connessione */
ret = listen(sk, QUEUE_LEN);
if (ret < 0) return -1;

/* Inizializzazione indirizzo del Client */
bzero(&c_addr, sizeof(c_addr));
len = sizeof(c_addr);

/* Accept connessioni con i client */
client = accept(sk, (struct sockaddr*)&c_addr, &len );

/* Ricezione Dati */
ret = recv(client, buffer, BUFF_SIZE, 0);
if (ret < 0) return -1;
printf("Server Receive: %s\n", buffer);

/* Invio Dati */
ret = send(client, buffer, BUFF_SIZE, 0);
if (ret < 0) return -1;
printf("Server Send: %s\n", buffer);

/* Chiusura del socket di comunicazione con il Client */
close(client);

return 1;
}


Per compilarlo basta digitare il comando:

gcc -o server_tcp server_tcp.c

dove server_tcp.c è il nome del file contenente il codice del server.

Nessun commento: