Eigenschaften Methoden |
Bedeutung für | |
---|---|---|
TClientSocket |
TServerSocket |
|
Active : Boolean | ist genau dann True, wenn eine aktive TCP-Verbindung über diesen Socket besteht | |
Address : String | enthält die TCP/IP-Adresse des Servers, der angesprochen werden soll | {nicht vorhanden} |
Port : Integer | enthält den Port des Servers, über den der Dienst angesprochen werden soll | enthält den Port, über den der Dienst zur Verfügung gestellt wird |
Socket : TCustomWinSocket | stellt Eigenschaften und Prozeduren für die eigentliche TCP/IP-Transport-Funktionalität bereit: z.B. LocalAddress, LocalPort, RemoteAddress, RemotePort |
|
z.B. SendText(s: String) diese Prozedur sendet den übergebenen String s an den Server |
z.B. ReceiveText: String diese Funktion gibt den vom Client geschickten String an das aufrufende Programm zurück |
|
Open | lokalisiert den Server, stellt die Verbindung zu ihm her und schaltet Active auf True | schaltet den Server auf "Verbindungsbereitschaft" und Active auf True |
Close | unterbricht die Verbindung(en) und schaltet Active auf False |
procedure TForm1.Button1Click(Sender: TObject); begin ClientSocket1.Socket.SendText(Edit1.Text); end;
procedure TForm1.ServerSocket1ClientRead (Sender: TObject; Socket: TCustomWinSocket);Auffällig ist hier, dass neben dem inzwischen vertrauten (wenngleich noch nie benutzten!) Parameter "Sender" noch ein weiterer Parameter namens "Socket" vorhanden ist. Dieser Socket ist für die Weitergabe des Datenpakets zuständig, durch dessen Ankunft das aktuelle Ereignis ausgelöst wurde! Wir können das Datenpaket also auslesen, indem wir die Funktion Socket.ReceiveText dieses Sockets aufrufen:
procedure TForm1.ServerSocket1ClientRead (Sender: TObject; Socket: TCustomWinSocket); begin Edit1.Text := Socket.ReceiveText; end;Und warum können wir nicht einfach den ServerSocket1.Socket benutzen, analog zu unserem Vorgehen beim ClientSocket? Nun, eigentlich ist die Eigenschaft "ServerSocket.Socket" nur ein historisches Relikt, das aber streng genommen nutzlos ist! Am selben Server können sich nämlich mehrere Clients gleichzeitig anmelden, und die ServerSocket-Komponente muss daher intern eine ganze Liste von Sockets verwalten, für jede Verbindung zu einem Client eine eigene! In dem obigen Parameter "Socket" wird dann eben der jeweils passende Socket übergeben, und genau den müssen wir dann auch benutzen! Im Gegensatz dazu verbindet sich die ClientSocket-Komponente stets nur mit genau einem Server, so dass in diesem Fall auch nur ein Socket gebraucht wird, - und der wird dann in ClientSocket1.Socket eingetragen!