Sådan udveksles data over et netværk ved hjælp af Delphi

Af alle de komponenter, der Delphi leverer til at støtte applikationer, der udveksler data over et netværk (internet, intranet og lokalt), to af de mest almindelige er TServerSocket og TClientSocket, som begge er designet til at understøtte læse- og skrivefunktioner via en TCP / IP-forbindelse.

Winsock og Delphi Socket Components

Windows Sockets (Winsock) giver en åben grænseflade til netværksprogrammering under Windows-operativsystemet. Det tilbyder et sæt funktioner, datastrukturer og relaterede parametre, der kræves for at få adgang til netværkstjenesterne i enhver protokollestack. Winsock fungerer som en forbindelse mellem netværksapplikationer og underliggende protokollestack.

Delphi-socketkomponenter (indpakninger til Winsock) strømline oprettelsen af ​​applikationer, der kommunikerer med andre systemer ved hjælp af TCP / IP og relaterede protokoller. Med stikkontakter kan du læse og skrive forbindelser til andre maskiner uden at bekymre dig om detaljerne i den underliggende netværkssoftware.

instagram viewer

Internetpaletten på Delphi-værktøjslinjen er vært for TServerSocket og TClientSocket komponenter såvel som tcpclient, TcpServer, og TUdpSocket.

For at starte en socketforbindelse ved hjælp af en socketkomponent, skal du specificere en vært og en port. Generelt, vært specificerer et alias til serversystemets IP-adresse; Havn specificerer det ID-nummer, der identificerer serverstikforbindelsen.

Et simpelt enkeltvejsprogram til at sende tekst

For at opbygge et simpelt eksempel ved hjælp af socketkomponenterne leveret af Delphi skal du oprette to formularer - en til serveren og en til klientcomputeren. Tanken er at give klienterne mulighed for at sende nogle tekstdata til serveren.

Hvis du vil starte, skal du åbne Delphi to gange og oprette et projekt til serverapplikationen og et for klienten.

Server side:

Indsæt en TServerSocket-komponent og en TMemo-komponent på en formular. I OnCreate-begivenhed tilføj den næste kode til formularen:

procedure TForm1.FormCreate (Afsender: TObject);
begynde
ServerSocket1.Port: = 23;
ServerSocket1.Active: = Sandt;
ende;

Det OnClose begivenhed skal indeholde:

procedure TForm1.FormClose
(Afsender: TObject; Var Handling: TCloseAction);
begynde
ServerSocket1.Active: = falsk;
ende;

Kundeside:

Til klientapplikationen skal du tilføje en TClientSocket-, TEdit- og TButton-komponent til en formular. Indsæt følgende kode for klienten:

procedure TForm1.FormCreate (Afsender: TObject);
begynde
ClientSocket1.Port: = 23;
// serverens lokale TCP / IP-adresse
ClientSocket1.Host: = '192.168.167.12';
ClientSocket1.Active: = true;
ende;
procedure TForm1.FormClose (Afsender: TObject; Var Handling: TCloseAction);
begynde
ClientSocket1.Active: = falsk;
ende;
procedure TForm1.Button1Click (Afsender: TObject);
beginif ClientSocket1.Active derefter
ClientSocket1.Socket. SendText (Edit1.Text);
ende;

Koden beskriver stort set sig selv: Når en klient klikker på en knap, sendes den tekst, der er angivet i Edit1-komponenten, til serveren med den angivne port og værtadresse.

Tilbage til serveren:

Det sidste touch i denne prøve er at give serveren en funktion til at "se" de data, klienten sender. Den begivenhed, vi er interesseret i, er OnClientRead - den opstår, når serverkontakten skal læse information fra en klientsokkel.

procedure TForm1.ServerSocket1ClientRead (Afsender: TObject;
Socket: TCustomWinSocket);
begynde
Memo1.Lines. Tilføj (stik. ReceiveText);
ende;

Når mere end en klient sender data til serveren, har du brug for lidt mere for at kode:

procedure TForm1.ServerSocket1ClientRead (Afsender: TObject;
Socket: TCustomWinSocket);
Var
i: heltal;
SREC: snor;
beginfor i: = 0 til ServerSocket1.Socket. ActiveConnections-1 dobeginwith ServerSocket1.Socket. Forbindelser [i] dobegin
sRec: = ReceiveText;
hvis sRecr '' thenbegin
Memo1.Lines. Tilføj (RemoteAddress + 'sender:');
Memo1.Lines. Tilføj (sRecr);
ende;
ende;
ende;
ende;

Når serveren læser oplysninger fra en klientsokkel, tilføjer den den tekst til Memo-komponenten; både teksten og klienten RemoteAddress tilføjes, så du ved, hvilken klient der har sendt oplysningerne. I mere sofistikerede implementeringer kan aliaser for kendte IP-adresser fungere som en erstatning.

For et mere komplekst projekt, der bruger disse komponenter, skal du udforske Delphi> Demoer> Internet> Chat projekt. Det er et simpelt netværkschat-program, der bruger en form (projekt) til både serveren og klienten.