Einzelnen Beitrag anzeigen

Puddy

Registriert seit: 2. Jun 2007
18 Beiträge
 
FreePascal / Lazarus
 
#1

Bestimmte Geräte im Netzwerk suchen

  Alt 13. Nov 2016, 23:56
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.

Geändert von Puddy (14. Nov 2016 um 02:09 Uhr)
  Mit Zitat antworten Zitat