title image


Smiley ICH HAB DES RÄTZELS LÖSUNG
Client soll server finden

Allgemein



Damit ein Client nen AKTIVEN server finden kann,

Muss der Client per UDP "Broadcast" eine Suchanfrage starten.

Der Server muss nun nach Broadcastmessages lauschen und

und dann, wenn er was empfängt, sendet er auch

eine Bestätigung per UDP "Broadcast", aber auf eniem _anderen Port_.

Nun ist der Client dran mit lauschen und wenn er die Bestätigung empfängt,

kann aus der Bestätigung die ServerIP extrahiert werden.



Benötigt

Bibliotheken



IdUDPServer

IdUPDClient

IdSocketHandle



Serveranwendung



UPDServer

UDPClient



Clientanwendung



UDPServer

UPDClient













zum UPDClient

-------------



Kann dynamisch erzeugt werden, wenn er gebraucht wird



var UDPClient : TIdUDPClient;

begin

UDPClient := TIdUDPClient.Create(Self);

UDPClient.Port := iPort;

UDPClient.Active := True;

UDPClient.Broadcast('SUCHKOMANDO', iPort)

UDPClient.Active := False;

UDPClient.Free;

end;







zum UDPServer

-------------



Muss statisch erzeugt werden (beim Programmstart)



...

private

UDPServer : TIdUDPServer;

procedure UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);

...



...

procedure TForm1.FormCreate(Sender: TObject);

begin

Self.UDPServer := TIdUDPServer.Create(Self);

Self.UDPServer.OnUDPRead := Self.UDPServerUDPRead;

Self.UDPServer.DefaultPort := iPort;

Self.UDPServer.Activ := True;

end;

...



...

procedure TForm1.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);

var RecText: string;

begin

SetLength(RecText, AData.Size);

AData.ReadBuffer(PChar(RecText)^, AData.Size);

end;

...



...

procedure TForm1.FormClose(Sender : TObject);

begin

UDPServer.Active := False;

end;

...



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: