HSG

Aktuelle Seite: HSG/Fächer/Informatik/Netze/Programme

In den RFCs ist ein Socket als ein Tupel aus Ziel- und Quell-IP-Adresse, Ziel- und Quell-Port und Netzwerkprotokoll beschrieben.(aus wikipedia)
Der Ziel-Port wählt einen bestimmten Dienst aus, der Quell-Port wird zufällig generiert. Auf diese Weise sind mehrere Verbindungen zu einem Dienst zwischen zwei Rechnern möglich.
Wir benutzen ein Socket als eine Software-Schnittstelle zum Zweck der Nutzung einer bidirektionalen Verbindung zwischen Computern. Diese Schnittstelle wird in objektorientierten Sprachen als ein spezielles Objekt auftreten, das die Handhabung erleichtert.

TWSocket

Klassendiagramm zu TWSocket In den folgenden Beispielen wird die Klasse TWSocket von Francois Piette verwendet, die wiederum Windows-Api-Funktionen kapselt. Nebenstehendes Klassendiagramm zeigt nur den Teil der Attribute und Methoden, die für einen ersten Einstieg gebraucht werden.
Zu der Klasse gibt es eine Windows-Hilfe-Datei (WSocketHlp.zip), die die meisten Attribute und Methoden erläutert.
In den Beispiel-Programmen wird TWSocket dynamisch verwendet, dh. es ist keine Installation der Komponenten erforderlich.


Links

Beispielprogramme

Client0

GUI zu client0

Download: client0.zip(ca. 47 kB)

Auszug aus dem Quelltext

procedure TClientForm.FormCreate(Sender: TObject);
begin
  // Erzeugung
  socket := TWSocket.Create(nil);
  // Verbinden der Ereignis-Behandlungen
  socket.OnSessionConnected := socketSessionConnected;
  socket.OnSessionClosed    := socketSessionClosed;
  socket.OnDataAvailable    := socketDataAvailable;
end;

procedure TClientForm.FormDestroy(Sender: TObject);
begin
  socket.Free;
end;

procedure TClientForm.bConnectClick(Sender: TObject);
begin
  Socket.Addr   := eAdresse.Text;
  Socket.Proto  := 'tcp';
  Socket.Port   := ePort.Text;
  Socket.Connect;              // versuche, Verbindung aufzubauen
  // nach dem effektiven Aufbau wird OnSessionConnected ausgelöst
end;

// Ereignis-Behandlung
procedure TClientForm.SocketSessionConnected(Sender: TObject; Error: Word);
begin
  FError := Error;      // Fehlercode merken
  if Error <> 0
  then
    mMeldungen.Lines.Add('keine Verbindung, Fehlernummer: ' + IntToStr(Error))
  else
    mMeldungen.Lines.Add('Verbindung steht!');
  bDisconnect.Enabled := true;
  bConnect.Enabled    := false;
end;

// Ereignis-Behandlung
procedure TClientForm.SocketDataAvailable(Sender: TObject; Error: Word);
begin
  mEin.Lines.Add(Socket.ReceiveStr);
end;

// Ereignis-Behandlung
procedure TClientForm.SocketSessionClosed(Sender: TObject; Error: Word);
begin
  if FError = 0
  then
    if Error <> 0
    then
      mMeldungen.Lines.Add('Verbindung beendet, Fehlernummer: ' + IntToStr(Error))
    else
      mMeldungen.Lines.Add('Verbindung beendet!');
  bDisconnect.Enabled := false;
  bConnect.Enabled    := true;
end;

procedure TClientForm.bSendenClick(Sender: TObject);
begin
  Socket.Text := mAus.Text;
end;

procedure TClientForm.bDisconnectClick(Sender: TObject);
begin
  Socket.Close;
  // beim effektiven Schluss wird OnSessionClosed ausgelöst
end;

Server0

GUI zu server0 server0.zip

TimeClient

GUI zu timeClient timeclient.zip

DNS-Lookup

GUI zu DNS-Lookup dnslookup.zip

Basis eines Chat-Servers

GUI zu Server1 server1.zip