Cum să faceți schimb de date printr-o rețea folosind Delphi

Dintre toate componentele care Delphi oferă suport pentru aplicații care fac schimb de date printr-o rețea (internet, intranet și local), două dintre cele mai frecvente sunt TServerSocket și TClientSocketambele sunt concepute pentru a susține funcțiile de citire și scriere printr-o conexiune TCP / IP.

Componente de priză Winsock și Delphi

Windows Sockets (Winsock) oferă o interfață deschisă pentru programarea rețelei în cadrul sistemului de operare Windows. Oferă un set de funcții, structuri de date și parametri asociați necesari pentru a accesa serviciile de rețea ale oricărui stivu de protocol. Winsock acționează ca o legătură între aplicațiile de rețea și stivele de protocol de bază.

Componentele soclurilor Delphi (învelitoare pentru Winsock) simplifică crearea de aplicații care comunică cu alte sisteme folosind TCP / IP și protocoale conexe. Cu prize, puteți citi și scrie conexiuni la alte mașini fără să vă faceți griji pentru detaliile software-ului de rețea de bază.

Paleta de internet din bara de instrumente componente Delphi găzduiește

instagram viewer
TServerSocket și TClientSocket componente precum și TcpClient, TcpServer, și TUdpSocket.

Pentru a porni o conexiune socket folosind o componentă socket, trebuie să specificați o gazdă și un port. În general, gazdă specifică un alias pentru adresa IP a sistemului server; port specifică numărul de identificare care identifică conexiunea socket-ului serverului.

Un program simplu pentru a trimite text

Pentru a construi un exemplu simplu folosind componentele socket furnizate de Delphi, creați două formulare - unul pentru server și altul pentru computerul client. Ideea este de a permite clienților să trimită date textuale către server.

Pentru a începe, deschideți Delphi de două ori, creând un proiect pentru aplicația serverului și unul pentru client.

Partea de server:

Pe un formular, introduceți o componentă TServerSocket și o componentă TMemo. În Eveniment OnCreate pentru formular, adăugați următorul cod:

procedură TForm1.FormCreate (Expeditor: TObject);
începe
ServerSocket1.Port: = 23;
ServerSocket1.Active: = True;
Sfârșit;

OnClose evenimentul trebuie să conțină:

procedură TForm1.FormClose
(Expeditor: TObject; var Acțiune: TCloseAction);
începe
ServerSocket1.Active: = fals;
Sfârșit;

Partea clientului:

Pentru aplicația client, adăugați o componentă TClientSocket, TEdit și TButton într-un formular. Introduceți următorul cod pentru client:

procedură TForm1.FormCreate (Expeditor: TObject);
începe
ClientSocket1.Port: = 23;
// adresa TCP / IP locală a serverului
ClientSocket1.Host: = '192.168.167.12';
ClientSocket1.Active: = true;
Sfârșit;
procedură TForm1.FormClose (Expeditor: TObject; var Acțiune: TCloseAction);
începe
ClientSocket1.Active: = fals;
Sfârșit;
procedură TForm1.Button1Click (Expeditor: TObject);
beginif ClientSocket1.Active apoi
ClientSocket1.Socket. SendText (Edit1.Text);
Sfârșit;

Codul se descrie destul de mult: când un client face clic pe un buton, textul specificat în componenta Edit1 va fi trimis serverului cu portul și adresa de gazdă specificate.

Înapoi la server:

Atingerea finală a acestui eșantion este de a oferi o funcție pentru server pentru a „vedea” datele pe care le trimite clientul. Evenimentul care ne interesează este OnClientRead - se produce atunci când soclul serverului ar trebui să citească informațiile dintr-un soclu client.

procedură TForm1.ServerSocket1ClientRead (Expeditor: TObject;
Socket: TCustomWinSocket);
începe
Memo1.Lines. Adăugați (priză). ReceiveText);
Sfârșit;

Când mai mult de un client trimite date către server, veți avea nevoie de ceva mai mult pentru a codifica:

procedură TForm1.ServerSocket1ClientRead (Expeditor: TObject;
Socket: TCustomWinSocket);
var
i: număr întreg;
SREC: şir;
beginfor i: = 0 la ServerSocket1.Socket. ActiveConnections-1 dobeginwith ServerSocket1.Socket. Conexiuni [i] dobegin
sRec: = ReceiveText;
dacă sRecr '' thenbegin
Memo1.Lines. Adăugare (RemoteAddress + 'trimite:');
Memo1.Lines. Adăugați (sRecr);
Sfârșit;
Sfârșit;
Sfârșit;
Sfârșit;

Când serverul citește informațiile dintr-un soclu client, acesta adaugă textul la componenta Memo; se adaugă atât textul, cât și clientul RemoteAddress, astfel încât să știți ce client a trimis informațiile. În implementări mai sofisticate, alias-urile pentru adresele IP cunoscute pot servi ca substitut.

Pentru un proiect mai complex care folosește aceste componente, explorați Delphi> Demo> Internet> Chat proiect. Este o aplicație simplă de chat de rețea care folosește un formular (proiect) atât pentru server, cât și pentru client.