Următorul exemplu folosind TCP, pentru a asigura o buna, de încredere în ambele sensuri fluxuri octet. Noi construim o aplicație completă, inclusiv client și server. În primul rând ne arată cum să construiască pe serverul de streaming socket TCP și apoi aplicația client pentru a testa serverul nostru.
Programul următor creează un server care primește cereri de conectare de la clienți. Serverul se bazează în sincronizare, prin urmare, firul este blocat până când serverul nu va da acordul pentru conexiunea cu clientul. Această aplicație demonstrează un server simplu răspunde la client. Clientul completează conexiunea prin trimiterea unui mesaj la server
TCP server
Crearea unei structuri de server prezentată în următoarea diagramă funcțională:
Aici este codul complet de program SocketServer.cs:
Să ne uităm la structura programului.
Aici clasa IPEndPoint este localhost pe portul 11000 Mai departe, o nouă instanță a clasei Socket crea un socket flux. Setarea unui punct final local, să aștepte pentru conexiuni, puteți crea un socket:
În parametrul SocketType diferite TCP și UDP. Acesta poate fi determinată, inclusiv următoarele valori:
Acesta permite accesul la protocolul de transport de bază.
Aceasta susține prize de streaming. Înțeles Stream necesită să tastați protocolul TCP.
Al treilea și ultimul parametru specifică tipul de protocol necesar pentru priza. În parametrul RrotocolType poate specifica următoarele valori mai importante - TCP, UDP, IP, Raw.
Următorul pas ar trebui să fie numirea unui soclu folosind metoda Bind (). Atunci când un socket este deschis de designer, el nu a fost dat un nume, dar rezervat doar descriptor. Bind () metoda este invocată pentru a atribui un nume de la priza de server. Pentru clientul socket poate identifica socket flux TCP, programul server este de a da un nume la priza:
Bind (), metoda se leaga priza la punctul final local. Apelați metoda bind () este necesară înainte de orice încercare de a accesa Listen () și Accept ().
Acum, creați un socket și numele aferent, puteți asculta mesajele primite folosind o metodă Listen (). Priza de ascultare va fi capabil să asculte încercări de conectare de intrare:
Parametrul se determină restante (restante). indicând numărul maxim de conexiuni în așteptare coadă. În acest cod valoarea permite acumularea în coada de așteptare de până la zece conexiuni.
În ascultarea statului trebuie să fie pregătite să accepte o legătură cu clientul, care accepta () se utilizează metoda. Cu această metodă, un compus obținut de către client și se termină stabilirea de comunicații și serverul numele clientului. Acceptare () metoda a blocurilor apelanți fluxul continuă la compus.
Acceptați () metoda extrage prima solicitare de conectare din coada de cereri restante și creează o nouă priză pentru prelucrarea acestuia. Deși este creat noul socket, priza originală continuă să asculte și pot fi utilizate cu procesarea multi-thread pentru primirea unei multitudini de cereri de conectare de la clienți. Nici o cerere server nu ar trebui să închidă priza de ascultare. El trebuie să continue să lucreze împreună cu soclul creat de Acceptare pentru a procesa solicitările clienților primite.
Odată ce clientul și serverul au stabilit o conexiune, puteți trimite și primi mesaje utilizând metodele Trimitere () și Receive (clasa Socket).
Trimite () metoda scrie soclu de date de ieșire la care este stabilită o conexiune. Primire () metoda citește mufa de intrare a fluxului de date. Atunci când se utilizează un sistem bazat pe TCP, înainte de a efectua metoda Trimitere () și Primire () între conexiunea de priză trebuie să fie stabilită. Protocolul exact între două entități care comunică trebuie să fie specificate în prealabil aplicațiile client și server nu blochează reciproc, nu știe cine ar trebui să trimită datele lor mai întâi.
În cazul în care schimbul de date între client și server este finalizată, închideți conexiunea de Shutdown () și Close ().
SocketShutdown - această enumerare conține trei valori pentru oprire: Ambele - oprește trimiterea și primirea de date socket, Primire - oprește care primesc date soclu și trimiterea - nu mai trimite date soclu.
Priza este închisă atunci când apelul metoda Close (), care stabilește, de asemenea, valoarea proprietății Connected priză falsă.
Client pe TCP
Funcțiile care sunt utilizate pentru a crea o aplicație client, mai mult sau mai puțin seamănă cu o aplicație server. În ceea ce privește serverul, folosind aceleași metode pentru a determina punctul final, crearea de instanta soclu, trimiterea și primirea de date și de închidere priza:
Aici este codul complet pentru SocketClient.cs și explicația lui:
Singura metodă nouă - Connect () metoda. utilizat pentru conectarea la un server de la distanță. Figura de mai jos arată client și server în acțiune: