Client-server în borland delphi pe bază de prize, Internet și rețea, articole, programare -

Deci, să începem cu teoria. Dacă sunteți un practicant convins (și nu puteți vedea niciun algoritm în ochi), atunci ar trebui să săriți peste această secțiune.

Algoritmul serverului socket

Ce face un server socket posibil. Prin ce principiu lucrează. Serverul, bazat pe protocolul socket, vă permite să serviți mai mulți clienți simultan. Mai mult, puteți să specificați o limită a numărului lor (sau să eliminați complet această restricție, așa cum sa făcut în mod implicit). Pentru fiecare client conectat, serverul deschide un soclu separat, prin care puteți face schimb de date cu clientul. De asemenea, o soluție excelentă este crearea unui proces separat pentru fiecare conexiune (Thread).







Să analizăm schema în detaliu:
  • Determinarea St-Port și ServerType - la server se poate conecta în mod corespunzător clienții trebuie să portul serverul va folosi exact la fel ca și portul utilizat de către client (și vice-versa). Proprietatea ServerType specifică tipul de conexiune (vedeți mai jos pentru detalii);
  • Deschiderea soclului - deschiderea soclului și a portului specificat. Aici se efectuează pornirea automată a așteptării conexiunii client (Ascultă);
  • Conectarea clientului și schimbul de date cu acesta - clientul este conectat și datele sunt schimbate cu acesta. Mai multe informații despre acest pas pot fi găsite mai jos în acest articol și în articolul despre prize (partea client);
  • Deconectarea clientului - Clientul deconectează și închide conexiunea de socket la server;
  • Închiderea serverului și a socket-ului - La comanda administratorului, serverul își încheie activitatea, închizând toate canalele deschise și oprind așteptarea conexiunilor client.

Trebuie remarcat faptul că punctele 3-4 se repetă de mai multe ori, adică aceste elemente sunt executate pentru fiecare nouă conexiune client.

O scurtă descriere a componentei TServerSocket

Aici vom fi familiarizați cu proprietățile, metodele și evenimentele de bază ale componentei TServerSocket.

Socket - clasa TServerWinSocket, prin care aveți acces la canalele de socket deschise. Apoi, vom examina această proprietate în detaliu, pentru că aceasta, de fapt, este una dintre principalele. Tip: TServerWinSocket;
ServerType este tipul de server. Poate lua una din cele două valori: stNonBlocking - lucrul sincron cu prizele de client. Cu acest tip de server, puteți lucra cu clienții prin evenimentele OnClientRead și OnClientWrite. stThreadBlocking este un tip asincron. Pentru fiecare canal de socket client este creat un proces separat (Thread). Tip: TServerType;






ThreadCacheSize - numărul de procese client (Thread) care vor fi stocate în cache de către server. Aici trebuie să selectați valoarea medie în funcție de volumul de lucru al serverului dvs. Caching-ul are loc pentru a nu crea câte un proces separat de fiecare dată și nu pentru a ucide soclul închis, ci pentru a le lăsa pentru utilizare ulterioară. Tip: Integer;
Activ - indicatorul dacă serverul este activ în acest moment sau nu. Ie de fapt, valoarea True indică faptul că serverul rulează și este gata să primească clienți, iar False - serverul este dezactivat. Pentru a porni serverul, trebuie doar să setați această proprietate la True. Tip: Boolean;
Port - numărul portului pentru stabilirea conexiunilor cu clienții. Portul de la server și de la clienți trebuie să fie identic. Valorile cuprinse între 1025 și 65535 sunt recomandate, deoarece de la 1 la 1024 - pot fi ocupate de sistem. Tip: Integer;
Service - un șir definind serviciul (ftp, http, pop, etc.) al cărui port va fi utilizat. Acesta este un fel de ghid pentru corespondența numerelor de port la diferite protocoale standard. Tip: șir;

Deschide - Începe serverul. De fapt, această comandă este identică cu atribuirea proprietății True la proprietatea activă;
Închidere - Închide serverul. De fapt, această comandă este identică cu atribuirea valorii false pentru proprietatea activă.

OnClientConnect - apare atunci când clientul a stabilit o conexiune socket și așteaptă un răspuns server (OnAccept);
OnClientDisconnect - apare când clientul se deconectează de la canalul socket;
OnClientError - apare când operațiunea curentă nu reușește; a apărut o eroare;
OnClientRead - apare atunci când clientul a transmis date către Berber. Accesul la aceste date poate fi obținut prin intermediul parametrului Socket: TCustomWinSocket;
OnClientWrite - apare atunci când serverul poate trimite date către client pe soclu;
OnGetSocket - în gestionarea evenimentului pentru acest eveniment, puteți edita parametrul ClientSocket;
OnGetThread - în tratare a evenimentelor, puteți defini un proces unic (fir) pentru fiecare canal client in parte, prin setarea subactivitatea SocketThread dorită TServerClientThread;
OnThreadStart. OnThreadEnd - apare atunci când subtask-ul (proces, Thread) este pornit sau oprit, respectiv;
OnAccept - apare atunci când serverul acceptă clientul sau îl refuză la conexiune;
OnListen - apare atunci când serverul intră în modul de așteptare pentru conectarea clienților.

TServerSocket.Socket (TServerWinSocket)

Practică și exemple

Iar acum ia în considerare cele de mai sus pentru un exemplu specific. Puteți descărca sursele finite făcând clic aici.

Deci, să luăm un exemplu foarte bun de a lucra cu TServerSocket (acest exemplu este cel mai vizibil ajutor pentru studierea acestei componente). Următoarele surse arată logarea tuturor evenimentelor importante ale serverului, plus capacitatea de a primi și de a trimite mesaje text:

Exemplul 1. Înregistrarea și studierea funcționării serverului, trimiterea / primirea mesajelor prin socket-uri.







Trimiteți-le prietenilor: