Ricerca con Ubuntiani Blog

lunedì 5 gennaio 2009

Client TCP

Dopo il server TCP andrò adesso ad implementare un semplice client TCP che si abbina al precedente server per lo scambio di un pacchetto informazioni. Come per il server andremo a complicare la struttura del client per aggiungerne nuove funzioni.

Ecco il codice relativo al client:

#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;
int client;
int ret;
struct sockaddr_in s_addr;
struct sockaddr_in c_addr;
char buffer[] = "Sono il client 345.\0";

int port = 2001;
char address[] = "127.0.0.1";

sk = socket(AF_INET, SOCK_STREAM, 0);

bzero(&s_addr, sizeof(s_addr));
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(port);
s_addr.sin_addr.s_addr = inet_addr(address);

connect(sk, (struct sockaddr*)&s_addr, sizeof(s_addr));

printf("Client Send: %s\n", buffer);
ret = send(sk, buffer, BUFF_SIZE, 0);

ret = recv(sk, buffer, BUFF_SIZE, 0);
printf("Client Receive: %s\n", buffer);

return 1;
}


Come per il server, per poter compilare il client è sufficiente digitare da terminale:

gcc -o client_tcp client_tcp.c

dove client_tcp.c è il nome data al file contenente il codice esposto in precedenza.

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.

giovedì 1 gennaio 2009

Ikariam

Oggi vi propongo un gioco online che alcuni miei amici mi hanno mostrato in questi giorno di festa.

Si tratta di Ifariam, una sorta di MMOG che vi permetterà di costruire le vostre città all'epoca dei romani e poter amministrare i vostri domini.

Il link al sito ufficiale è il seguente:
http://www.ikariam.it/

Saluti a tutti!
Mordor