Hallo,
ich möchte in einer Listview alle Geräte im Netzwerk anzeigen, die auf eine Broadcast Nachricht antworten.
Als ersten Schritt wollte ich alle Antworten in einem Memo anzeigen.
Mein Problem ist: Nur das Gerät mit der ersten Antwort wird angezeigt. In Wireshark sehe ich, dass die Nachricht wie gewünscht gesendet wird und alle Geräte wie erwartet antworten. Stimmt da was mit den Bindings nicht? Muss ich den Buffer anders benutzen?
Ich benutze Delphi 10 und die Indys 10.6.2.5298
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
Client: TIdUDPClient;
lenUDP : integer;
begin
Memo1.Lines.Add('new');
Client := TIdUDPClient.Create(nil);
try
Client.Host := '192.168.178.255';
Client.Port := 22004;
Client.BroadcastEnabled := True;
client.Send('PING');
Client.ReceiveTimeout := 5000;
SetLength(myBuf, client.BufferSize);
lenUDP := client.ReceiveBuffer(myBuf, -1);
memo1.Lines.Add(inttostr(lenUDP));
if lenUDP > 0 then begin
SetLength(myBuf, lenUDP);
memo1.Lines.Add(bytestostring(mybuf))
end;
finally
Client.Free;
end;
end;
Und: Wäre es besser stattdessen den UDPServer zu benutzen? Soweit ich das sehe kann ich damit nicht bestimmen über welches Netzwerk Interface der Broadcast gesendet wird. Ebenfalls habe ich noch keine Information gefunden, welcher Broadcasttyp hier benutzt wird. Ich möchte lieber mit directed Broadcast arbeiten, weil der limited Broadcast von den Routern blockiert wird und ich die Netzwerk Topologie im Regelfall nicht kenne.