Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Rechner identifizieren über Indy UDP Komponenten (https://www.delphipraxis.net/83246-rechner-identifizieren-ueber-indy-udp-komponenten.html)

little_budda 29. Dez 2006 19:23


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:

DGL-luke 29. Dez 2006 19:28

Re: Rechner identifizieren über Indy UDP Komponenten
 
Ist Broadcast nicht 255.255.255.255:Port?

little_budda 29. Dez 2006 19:30

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.

DGL-luke 29. Dez 2006 19:41

Re: Rechner identifizieren über Indy UDP Komponenten
 
Kann sein, weiß ich nicht :stupid:

little_budda 30. Dez 2006 14:14

Re: Rechner identifizieren über Indy UDP Komponenten
 
Hallo,

wie in diesem Thread
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:
// 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;
Klappt aber trotz allem nicht.
Mein Server empfängt keine Nachricht.

Gruß Holger.

:gruebel:

little_budda 1. Jan 2007 08:13

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:

Sharky 1. Jan 2007 08:22

Re: Rechner identifizieren über Indy UDP Komponenten
 
Zitat:

Zitat von little_budda
....eine Nachricht an die Broadcastadresee
in meine Subnetz schicken lassen und gehofft das mein IndyUdpServer
die Replys erhält ...

Hai Holger,

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.

little_budda 1. Jan 2007 08:58

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 15:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz