Informatiile urmatoare sunt luate din documentatia MicroSoft pentru dezvoltatorii de aplicatii Win32.
Bibliotecile winsock si winsock2 includ aceasta interfata pentru asigurarea compatibilitatii cu aplicatiile dezvoltate pe UNIX.
Doua functii din interfata Berkeley n-au fost implementate de Windows
Sockets; este vorba de functiile read() si write().
Alte doua functi au capatat alt nume in implementarea Windows; ioctl()
a devenit ioctlsocket(), iar close() a devenit closesocket().
Funciile interfetei socket implementate in Windows sunt in ordine:
| accept1 | O cerere de conexiune este recunoscuta si se asociaza cu ea un socket creat pentru comunicarea cu clientul care a facut cererea de conectare. Socketul initial este adus din nou la starea de ascultare. |
| bind | Atribuie o adresa locala unui socket fara adresa. |
| closesocket1 | Inlatura un socket din tabelul de referinte la obiecte per-proces. Blocheaza socketul numai daca este setat SO_LINGER cu un timp de pauza pe un socket cu blocare. |
| connect1 | Initiaza o conexiune la un socket specificat. |
| getpeername | Intoarce numele corespondentului conectat la un socket specificat. |
| getsockname | Intoarce adresa locala la care un socket este legat. |
| getsockopt | Intoarce optiunile asociate cu un socket specificat. |
| htonl2 | Converteste o marime pe 32 de biti de la formatul pentru pentru host la formatul pentru retea. |
| htons2 | Converteste o marime pe 16 de biti de la formatul pentru pentru host la formatul pentru retea. |
| inet_addr2 | Converteste un sir de caractere reprezentand un numar in notatia "." standard pentru Internet la o valoare de adresa Internet address value. |
| inet_ntoa2 | Converteste o valoare de adresa Internet la un sir ASCII in notatia "." adica "a.b.c.d''. |
| ioctlsocket | Asigura controlul socketurilor. |
| listen | Asteapta cereri de conectare la un socket specificat. |
| ntohl2 | Converteste o marime pe 32 de biti de la formatul pentru pentru retea la formatul pentru host. |
| ntohs2 | Converteste o marime pe 16 de biti de la formatul pentru pentru retea la formatul pentru host. |
| recv1 | Receptioneaza date de la un socket cu sau fara conexiune. |
| recvfrom1 | Receptioneaza date atat de la un socket conectat cat si de la un socket neconectat. |
| select1 | Asigura multiplexarea Intrare / iesire sincrona. |
| send1 | Trimite date printr-un socket conectat. |
| sendto1 | Trimite date atat la un socket conectat cat si la un socket neconectat. |
| setsockopt | Seteaza optiuni asociate cu un socket specificat. |
| shutdown | Inchide o parte a unei conexiuni full-duplex. |
| socket | Creeaza un capat de comunicare si intoarce un discriptor de socket. |
| WSAStartup | Initializeaza utilizarea bibliotecii DLL de catre un proces. |
WSACleanup |
Functia WSACleanup a Windows Sockets termina
utilizarea DLL-ului Windows Sockets. Sintaxa ei este
|
1 Functia poate produce blocare daca actioneaza asupra unui socket cu blocare.
2 Functia este pastrata pentru compatibilitate cu Windows Sockets 1.1, si
trebuie folosita numai cu familia de adrese AF_INET.
Figura urmatoare prezinta apelurile tipice pentru socketuri pe care o aplicatie le poate folosi cu un protocol orientat pe conexiune.

Partea din stanga a diagramei reprezinta apelurile de functii facute de server, partea din dreapta reprezinta apelurile de functii ale clientului. Sagetile verticale reprezinta ordinea apelurilor, iar sagetile orizontale fluxul comunicatiei intre cele doua procese.
Pentru implementarea unui server orientat pe conexiune sunt necesare, in ordine, urmatoarele apeluri de functii API.
WSAStartup(). In Window Sockets aceasta functie trebuie apelata
pentru initializarea utilizarii bibliotecii DLL asociate.socket(). Serverul creeaza un socket cu functia socket().bind(). Serverul inregistreaza (leaga) socketul la un port
local.listen(). Functia listen cere socketului sa astepte cereri de
conectare si sa confirme primirea acestora. Functia listen()
trece socketul intr-o stare de asteptare pasiva.Un socket care sta in
ascultare va trimite fiecarui solicitant un mesaj de confirmare ca serverul
a receptionat cererea de conectare. Un socket in ascultare nu accepta de
fapt cererea de conectare.accept(). Programul server va trebui sa foloseasca pentru
aceasta functia accept().recv(). Aceasta functie se utilizeaza cu socketuri conectate sau socketuri legate
fara conexiune si este utilizata pentru citirea datelor de intraresend().Functia send() se foloseste pentru a scrie date
printr-un socket conectat.Pentru implementarea unui client orientat pe conexiune sunt necesare, in ordine, urmatoarele apeluri de functii API.
WSAStartup(). In Window Sockets aceasta functie trebuie apelata
pentru initializarea utilizarii bibliotecii DLL asociate.socket(). Clientul creeaza de asemenea un socket cu functia socket().connect(). Clientul nu este interesat de adresa locala de
protocol si de acea nu foloseste functia bind. In schimb, clientul orientat
pe conexiune initiaza conversatia in retea apeland functia connect.Dupa ce serverul si clientul stabilesc conexiunea, comunicatia care urmeaza
are loc prin intermediul functiilor recv() si send() de
ambele parti. Totusi, clientul si serverul mai pot utiliza functiile sendto()
si recvfrom().
Figura urmatoare ilustreaza secventa tipica de apelurile pentru socketuri utilizate la protocoale fara conexiune.

Programul server fara conexiune din figura de mai sus utilizeaza apelurile socket()
si bind() in acelasi mod in care o face si un server orientat pe
conexiune. Pentru preluarea datelor de la socket programul server fara conexiune
apeleaza functia recvform(). Functia recvform() nu
asteapta realizarea unei conexiuni. In schimb, raspunde oricaror solicitari care
sosesc la portul la care s-a inregistrat cu functia bind(). Cand
functia recvform() receptioneaza o datagrama de la socket, ea
memoreaza adresa de retea a procesului care a trimis datagrama, precum si
datagrama insasi.
De notat ca in cazul protocoalelor fara conexiune si clientul se poate lega
(optional) la un port folosind functia bind().
In esenta apelurile sunt aceleasi. Deosebirea intre client si server apare si
aici din faptul ca dialogul este initiat tot de client prin cererea de serviciu
pentru care foloseste functia sendto().
![]()
© Cornel Mironel Niculae, 2004-2005
25-Mar-2008