Van alle componenten die Delphi biedt ondersteuning voor toepassingen die gegevens uitwisselen via een netwerk (internet, intranet en lokaal), twee van de meest voorkomende zijn TServerSocket en TClientSocketdie beide zijn ontworpen om lees- en schrijffuncties te ondersteunen via een TCP / IP-verbinding.
Winsock- en Delphi-socketcomponenten
Windows Sockets (Winsock) biedt een open interface voor netwerkprogrammering onder het Windows-besturingssysteem. Het biedt een set functies, gegevensstructuren en bijbehorende parameters die nodig zijn voor toegang tot de netwerkservices van alle protocolstacks. Winsock fungeert als een koppeling tussen netwerktoepassingen en onderliggende protocolstapels.
Delphi-socketcomponenten (wrappers voor de Winsock) stroomlijnen het maken van applicaties die communiceren met andere systemen met behulp van TCP / IP en gerelateerde protocollen. Met sockets kunt u verbindingen met andere machines lezen en schrijven zonder dat u zich zorgen hoeft te maken over de details van de onderliggende netwerksoftware.
Het internetpalet op de Delphi-componentenwerkbalk host de TServerSocket en TClientSocket componenten evenals TcpClient, TcpServer, en TUdpSocket.
Als u een socketverbinding wilt starten met een socketcomponent, moet u een host en een poort opgeven. In het algemeen, gastheer specificeert een alias voor het IP-adres van het serversysteem; haven specificeert het ID-nummer dat de server-socketverbinding identificeert.
Een eenvoudig eenrichtingsprogramma om tekst te verzenden
Om een eenvoudig voorbeeld te bouwen met de socketcomponenten van Delphi, maakt u twee formulieren: één voor de server en één voor de clientcomputer. Het idee is om de klanten in staat te stellen tekstuele gegevens naar de server te sturen.
Om te beginnen, open Delphi tweemaal, maak een project voor de servertoepassing en een voor de klant.
Serverzijde:
Voeg op een formulier één TServerSocket-component en één TMemo-component in. In de OnCreate-gebeurtenis voeg voor het formulier de volgende code toe:
procedure TForm1.FormCreate (Sender: TObject);
beginnen
ServerSocket1.Port: = 23;
ServerSocket1.Active: = Waar;
einde;
De OnClose evenement moet bevatten:
procedure TForm1.FormClose
(Afzender: TObject; var Actie: TCloseAction);
beginnen
ServerSocket1.Active: = false;
einde;
Kant van de cliënt:
Voeg voor de clienttoepassing een component TClientSocket, TEdit en TButton toe aan een formulier. Voer de volgende code in voor de client:
procedure TForm1.FormCreate (Sender: TObject);
beginnen
ClientSocket1.Port: = 23;
// lokaal TCP / IP-adres van de server
ClientSocket1.Host: = '192.168.167.12';
ClientSocket1.Active: = waar;
einde;
procedure TForm1.FormClose (Afzender: TObject; var Actie: TCloseAction);
beginnen
ClientSocket1.Active: = false;
einde;
procedure TForm1.Button1Click (Afzender: TObject);
beginif ClientSocket 1. actief vervolgens
ClientSocket1.Socket. SendText (Edit1.Text);
einde;
De code beschrijft zichzelf min of meer: wanneer een klant op een knop klikt, wordt de tekst die is gespecificeerd in de Edit1-component naar de server gestuurd met een gespecificeerd poort- en hostadres.
Terug naar de server:
De laatste hand in dit voorbeeld is om de server een functie te bieden om de gegevens die de client verzendt te "zien". De gebeurtenis waarin we geïnteresseerd zijn, is OnClientRead - dit gebeurt wanneer de server-socket informatie van een client-socket moet lezen.
procedure TForm1.ServerSocket1ClientRead (Afzender: TObject;
Aansluiting: TCustomWinSocket);
beginnen
Memo1.Lines. Voeg (Socket. ReceiveText);
einde;
Wanneer meer dan één client gegevens naar de server stuurt, heb je iets meer nodig om te coderen:
procedure TForm1.ServerSocket1ClientRead (Afzender: TObject;
Aansluiting: TCustomWinSocket);
var
i: geheel getal;
sRec: draad;
beginnen voor ik: = 0 naar ServerSocket1.Socket. ActiveConnections-1 dobeginwith ServerSocket1.Socket. Verbindingen [i] dobegin
sRec: = ReceiveText;
als sRecr '' dan begon
Memo1.Lines. Toevoegen (RemoteAddress + 'stuurt:');
Memo1.Lines. Voeg (sRecr) toe;
einde;
einde;
einde;
einde;
Wanneer de server informatie van een client-socket leest, voegt deze die tekst toe aan de component Memo; zowel de tekst als de client RemoteAddress zijn toegevoegd, zodat u weet welke client de informatie heeft verzonden. In meer geavanceerde implementaties kunnen aliassen voor bekende IP-adressen als vervanging dienen.
Voor een meer complex project dat deze componenten gebruikt, verken de Delphi> Demo's> Internet> Chatten project. Het is een eenvoudige netwerkchat-applicatie die één formulier (project) gebruikt voor zowel de server als de client.