Hur man utbyter data via ett nätverk med Delphi

Av alla komponenter som Delphi tillhandahåller för att stödja applikationer som utbyter data över ett nätverk (internet, intranät och lokalt), två av de vanligaste är TServerSocket och TClientSocket, som båda är utformade för att stödja läs- och skrivfunktioner via en TCP / IP-anslutning.

Winsock och Delphi Socket Components

Windows Sockets (Winsock) tillhandahåller ett öppet gränssnitt för nätverksprogrammering under Windows-operativsystemet. Det erbjuder en uppsättning funktioner, datastrukturer och relaterade parametrar som krävs för att få åtkomst till nätverkstjänsterna för alla protokollstackar. Winsock fungerar som en länk mellan nätverksapplikationer och underliggande protokollstackar.

Delphi-socketkomponenter (omslag för Winsock) strömlinjeformar skapandet av applikationer som kommunicerar med andra system med TCP / IP och relaterade protokoll. Med uttag kan du läsa och skriva över anslutningar till andra maskiner utan att oroa dig för detaljerna i den underliggande nätverksprogramvaran.

instagram viewer

Internetpaletten på Delphi-verktygsfältet är värd för TServerSocket och TClientSocket komponenter såväl som TcpClient, TcpServer, och TUdpSocket.

För att starta en socketanslutning med en socketkomponent måste du ange en värd och en port. I allmänhet, värd specificerar ett alias för serversystemets IP-adress; hamn anger ID-numret som identifierar anslutningen till serveruttaget.

Ett enkelt envägsprogram för att skicka text

För att skapa ett enkelt exempel med hjälp av socketkomponenterna som tillhandahålls av Delphi, skapar du två formulär - en för servern och en för klientdatorn. Tanken är att göra det möjligt för kunderna att skicka textdata till servern.

För att starta, öppna Delphi två gånger och skapa ett projekt för serverapplikationen och ett för klienten.

Server sida:

Sätt i en TServerSocket-komponent och en TMemo-komponent på ett formulär. I OnCreate-händelse Lägg till nästa kod för formuläret:

procedur TForm1.FormCreate (avsändare: TObject);
Börja
ServerSocket1.Port: = 23;
ServerSocket1.Active: = Sant;
slutet;

De OnClose evenemanget bör innehålla:

procedur TForm1.FormClose
(Avsändare: TObject; var Åtgärd: TCloseAction);
Börja
ServerSocket1.Active: = falsk;
slutet;

Klientsidan:

För klientapplikationen lägger du till en TClientSocket-, TEdit- och TButton-komponent i ett formulär. Sätt in följande kod för klienten:

procedur TForm1.FormCreate (avsändare: TObject);
Börja
ClientSocket1.Port: = 23;
// serverens lokala TCP / IP-adress
ClientSocket1.Host: = '192.168.167.12';
ClientSocket1.Active: = true;
slutet;
procedur TForm1.FormClose (avsändare: TObject; var Åtgärd: TCloseAction);
Börja
ClientSocket1.Active: = falsk;
slutet;
procedur TForm1.Button1Click (avsändare: TObject);
beginif ClientSocket1.Active sedan
ClientSocket1.Socket. SendText (Edit1.Text);
slutet;

Koden beskriver ganska mycket sig själv: när en klient klickar på en knapp, kommer den text som anges i Edit1-komponenten att skickas till servern med angiven port och värdadress.

Tillbaka till servern:

Den sista handen i det här exemplet är att tillhandahålla en funktion för servern att "se" data som klienten skickar. Händelsen vi är intresserad av är OnClientRead - det inträffar när serveruttaget ska läsa information från ett klientuttag.

procedur TForm1.ServerSocket1ClientRead (avsändare: TObject;
Socket: TCustomWinSocket);
Börja
Memo1.Lines. Lägg till (uttag. ReceiveText);
slutet;

När mer än en klient skickar data till servern behöver du lite mer för att koda:

procedur TForm1.ServerSocket1ClientRead (avsändare: TObject;
Socket: TCustomWinSocket);
var
i: heltal;
SREC: sträng;
beginfor i: = 0 till ServerSocket1.Socket. ActiveConnections-1 dobeginwith ServerSocket1.Socket. Anslutningar [i] dobegin
sRec: = ReceiveText;
om sRecr '' thenbegin
Memo1.Lines. Lägg till (RemoteAddress + 'skickar:');
Memo1.Lines. Lägg till (sRecr);
slutet;
slutet;
slutet;
slutet;

När servern läser information från ett klientuttag lägger den till den texten till Memo-komponenten; både texten och klienten RemoteAddress läggs till, så du vet vilken klient som skickade informationen. I mer sofistikerade implementeringar kan alias för kända IP-adresser fungera som ett substitut.

För ett mer komplext projekt som använder dessa komponenter, utforska Delphi> Demos> Internet> Chat projekt. Det är en enkel nätverkschattapplikation som använder en form (projekt) för både servern och klienten.

instagram story viewer