![]() |
Rechner identifizieren über Indy UDP Komponenten
Hallo,
ich denke mein Problem ist hier im Forum schon mehrfach angesprochen worden, nur finde ich die passenden Threads zum Thema nicht. Also, Ich Pinge momentan alle Adressen im Subnetz über mehrere Threads an (Dank an Luckie) Klappt auch. Ich möchte nun gerne diese Funktion mit einem UDP Broadcast realisieren. Leider habe ich keinen Dateizugriff auf die restlichen Rechner im Lan und kann dem entsprechend dort keine Server plazieren. Ich habe meinen IndyUdpClient eine Nachricht an die Broadcastadresee in meine Subnetz schicken lassen und gehofft das mein IndyUdpServer die Replys erhält ( ... für jedes sein OnRead Ereignis auslöst ... ) so das ich aus dem Reply die IP Adresse lesen kann. Klappt leider nicht. HostAdresse des Clients : 192.168.1.255 Port 0 ( Broadcastadresse ) HostAdresse des Servers : 0.0.0.0:0 ( Lesen von allen Ports ??? ) Nachricht : "who is alive" ( ??? ) Ich habe testweise mal die Windows Firewall abgeschaltet, hat aber auch nicht geholfen. Wo liegt mein Fehler? Gruß Holger. :gruebel: |
Re: Rechner identifizieren über Indy UDP Komponenten
Ist Broadcast nicht 255.255.255.255:Port?
|
Re: Rechner identifizieren über Indy UDP Komponenten
Hallo,
also meines Wissens solte 255.255.255.255 ein Multicast sein. Ich denke Multicasts kann ich ber UDP nicht versenden .?. Gruß Holger. |
Re: Rechner identifizieren über Indy UDP Komponenten
Kann sein, weiß ich nicht :stupid:
|
Re: Rechner identifizieren über Indy UDP Komponenten
Hallo,
wie in diesem ![]() beschrieben habe ich meinen Client testweise mal umgestellt von "send" auf "broadcast" und einen festen Port eingestellt. Der Code sieht jetzt so aus:
Delphi-Quellcode:
Klappt aber trotz allem nicht.
// Broadcast über den Client senden
procedure Tfrm_main.Button1Click(Sender: TObject); var sSendText : string; begin sSendText := 'Hallo Welt'; // Text für Nachricht zuweisen IdUDPServer1.DefaultPort:=10025; // Port am Server einstellen IdUDPServer1.Active := true; // Server aktiv schalten IdUDPClient1.Host := Edit1.Text; // IP für Broadcast zuweisen (192.168.1.255) idudpclient1.Port:=10025; // Port einstellen idudpclient1.BroadcastEnabled:=true; // Broadcast freigeben IdUDPClient1.Active := true; // Client aktiv schalten idudpclient1.Broadcast(sSendText, 10025); // Nachricht senden IdUDPClient1.Active := false; // Client inaktiv schalten end; // Nachrichten von Server empfangen procedure Tfrm_main.IdUDPServer1UDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle); var sRecievedText : string; ix : integer; begin sRecievedText := ''; // Text löschen for ix := 1 to length(AData) // Nachricht aus dem Server UDP Read do sRecievedText := sRecievedText + chr(AData[ix]); // in String wandeln (Klartext) MessageDlg(pAnsiChar(sRecievedText), mtInformation, [mbOk], 0); // Klartext ausgeben end; Mein Server empfängt keine Nachricht. Gruß Holger. :gruebel: |
Re: Rechner identifizieren über Indy UDP Komponenten
Hallo,
wenn man den Server auf einem separaten Rechner laufen lässt dann klapt auch der Transfer per UDP. Weiss nicht warum ich nicht Server und Client auf einem Rechner laufen lassen kann aber Hauptsache ist das die Kommunikation jetzt klappt. Leider löst das mein Problem nicht. Da ich inzwischen erfahren habe das immer ein UDP-Server vorhanden sein muss um einen UDP Broadcast zu beantworten kann ich UDP vergessen. Ich werden diesen Thread schließen und mich an einem ARP Broadcast versuchen. Gruß Holger. :feuerchen: |
Re: Rechner identifizieren über Indy UDP Komponenten
Zitat:
welches Reply meinst Du denn? Beim UDP gibt es ja keine automatische Antwort von dem Rechner der das Packet erhalten hat (egal ob via Broadcast oder direkt an die IP gesendet). Du brauchst also in jedem Fall einen "Server" auf den Rechnern um deine TCP/UDP Packete empfangen und dann darauf reagieren zu können. |
Re: Rechner identifizieren über Indy UDP Komponenten
Hallo,
ja das war mein Problem. Wenn ich einen Ping schicke so antwortet mein Ziel automatisch. Wenn ich aber ein transparentes Gerät anpinge (Router, Bridge, ...) bekomme ich keine Rückgabe. Ich hatte gehofft das per UDP-Broadcast lösen zu können. Und da war es wieder - Das Client/Server Problem Aber mit einem ARP Broadcast sollte das klappen. (Hoffnung) Gruß Holger. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz