Es gibt auch eine Möglichkeit einen Broadcast auf nur einem Port durchzuführen, manchmal kann man dazu gezwungen sein, weil man an ein bestehendes Protokoll anlehnt.
Dazu braucht man beim Broadcaster nur eine
Indy-Komponente, und zwar einen IdUDPServer. (Beispiel bezieht sich auf
Indy Version 10)
Den Broadcast startet man mit
IdUDPServer1.Active := true; // Damit Antworten empfangen werden
IdUDPServer1.Broadcast('hallo', 1234); // Sendet 'hallo' an alle auf Port 1234
Die Antworten fängt man in OnUPDRead
procedure Form.IdUDPServer1UDPRead(Sender: TObject; AData: TBytes;
ABinding: TIdSocketHandle);
var
str : String;
begin
// Umwandeln der Daten in einen String
str := BytesToString(AData);
//
IP-Adresse des Senders liegt in ABinding.PeerIP
end;
Interessanterweise scheint es dabei egal zu sein, ob man vorher einen Port oder die EnableBroadcast Eigenschaft des Servers festlegt. Weggelassen im Beispiel wurde die Gegenseite, d.h. der Client.
Grüße,
Michael