Ce mai tin eu minte de la retele : Cel mai bine creezi TCP ( fara pierderi de informatie dar mai slow ), tu ai UDP ( mai rapid dar cu pierderi de informatie, e folosit in cazul streamurilor gen Skype video/audio unde nu prea conteaza daca se pierde cate ceva pe drum, etc. ) Tu ai un server si un client : Serverul poate servi clientii iterativ sau concurent ( de obicei este concurent din motive de scalabilitate ). struct sockaddr_in server; // structura folosita de server int sd; // descriptorul de socket sd = socket (AF_INET, SOCK_STREAM, 0); /* crearea unui socket */ /* stabilirea familiei de socket-uri */ server.sin_family = AF_INET; /* acceptam orice adresa */ server.sin_addr.s_addr = htonl (INADDR_ANY); /* utilizam un port utilizator */ server.sin_port = htons (PORT); /* atasam socketul */ bind (sd, (struct sockaddr *) &server, sizeof (struct sockaddr)); /* punem serverul sa asculte daca vin clienti sa se conecteze */ listen (sd, 5); apoi intr-o bucla while(1) accepti clienti si transmiti informatii cu read/write si la sfarsit inchizi conexiunile, acesta este o explicatie in mare, ca sa intelegi /* acceptam un client (stare blocanta pina la realizarea conexiunii) */ client1 = accept (sd, (struct sockaddr *) &from, &length); Client: Multe chestii la fel ca serverul doar ca e folosit pentru a te conecta, nu a accepta alte conexiuni : /* umplem structura folosita pentru realizarea conexiunii cu serverul */ /* familia socket-ului */ server.sin_family = AF_INET; /* adresa IP a serverului */ server.sin_addr.s_addr = inet_addr(argv[1]); /* portul de conectare */ server.sin_port = htons (port); connect (sd, (struct sockaddr *) &server,sizeof (struct sockaddr)) Iar apoi faci write/read si ce mai vrei tu iar la sfarsit inchizi conexiunea ( descriptorul de socket) Exemple in C: cli.c http://pastebin.com/0J4wfkUW serv.c http://pastebin.com/PsL1pN5K