Daten zwischen zwei Rechnern austauschen |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
Um Daten zwischen zwei Rechnern zu übertragen, verwenden wir die zwei Komponenten TServerSocket und TClientServer, die zum Lieferumfang von Delphi gehören.
Wir schreiben zwei Programme: Das eine ist der Client mit der ClientSocket-Komponente, das andere der Server mit der ServerSocket-Komponente.
Verbindungsaufbau
Server:
procedure TfrmServer.FormCreate(Sender: TObject);
begin
ServerSocket.Port := 23; //Festlegung des Ports
ServerSocket.active := true; //Aktivierung der ServerSocket
end;
Client:
procedure TfrmClient.FormCreate(Sender: TObject);
begin
ClientSocket1.Port := 23; //Festlegung des Ports
ClientSocket1.Host := '127.0.0.1'; //IP des Zielrechners
ClientSocket1.active := true; //Aufbau der Verbindung
end;
Beim Server kann man den Port frei festlegen (sofern er nicht schon von anderen Programmen genutzt wird und mit der Obergrenze von ca. 65000); der Client muss als Host die Adresse des Rechners, auf dem das Serverprogramm läuft, angeben (127.0.0.1 für den lokalen Rechner) und den Port, der vom Server abgehört wird.
Der Server läuft, der Client versucht, Kontakt zu ihm aufzunehmen. Der Server wartet bis er eine Nachricht erhält.
Nachricht senden
Client: Wir setzen auf das Client-Fenster einen Button. Ein Klick darauf soll einen Text an den Server schicken:
procedure TfrmClient.Button1Click(Sender: TObject);
begin
if ClientSocket1.Active then
ClientSocket1.Socket.SendText('Hallo Server');
end;
Server: Im Server müssen wir eine Ereignisbehandlungsroutine dafür implementieren (OnClientRead von TServerSocket):
procedure TfrmServer.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText);
end;
Der empfangene Text wird in einem Memo ausgegeben.
Antworten
Der Server antwortet:
Verbindung trennen
Werden die Anwendungen geschlossen, sollte die Verbindung wieder getrennt werden:
Server:
procedure TfrmServer.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ServerSocket.active:=false;
end;
Client:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ClientSocket1.Active:=false;
end;