Problem mit IdUDPClient

Hallo,
ich bin dabei, ein einfaches Tool zum Parametrieren von
Lantronix XPort zu entwickeln.

Um erst mal heraus zu bekommen,ob und welche XPort überhaupt
im Netzwerk verfügbar sind und was für IP die haben, gibt es
ja einige Broadcast-Befehle, die ich z.B. wie unten zu sehen
senden kann:

 SBuf[0]:=$00; SBuf[1]:=$01; SBuf[2]:=$00; SBuf[3]:=$F6;
 IdUDPClient1.SendBuffer('255.255.255.255',30718,SBuf,4);

Wenn ein XPort da ist und korrekt antwortet kann ich auch
auch die Antwort einlesen mit:

 IdUDPClient1.ReceiveTimeout := 1000;
 IdUDPClient1.ReceiveBuffer(RBuf1,BufZahl,1000);

Der Buffer stimmt in den ersten 30 Bytes dann auch mit
dem gesendeten UDP-Datenpaket überein:
z.B. wie hier zu sehen (als Hexdump formatiert):

000: 00 00 00 F7 00 20 70 06 58 35 BB 11 F6 15 00 00 
016: 62 A7 22 A1 FF 00 00 00 00 20 4A CD 60 1F ......

Nun zum eigentlichen Problem:
Die XPort haben offenbar einen Bug (oder ist es ein Feature?).
Wenn XPort mit gleicher IP im Netzwerk sind, antworten diese
nicht oder nur sehr sporadisch auf den UDP-Broadcast.
Das ist auch beim Lantronix eigenen Deviceinstaller so und
wurde auch mit Wireshark so beobachtet.

Der Receive-Befehl oben liefert aber immer irgend ein Ergebnis.
Ich habe nix gefunden, was mir sagt, ob überhaupt ein
gültiges Datenpaket empfangen wurde bzw. wie lang das
eigentlich sein müßte (eben z.B. 30 Byte im obigen Bsp.).

Was habe ich übersehen oder gibt es eine andere Komponente,
die das besser macht oder muß man das überhaupt anders angehen?
Wer kennt sich damit aus?
Im Internet habe ich keine Hinweise zur Lösung des Problems
gefunden, obwohl das Thema XPort und Indy-Komponenten da
vielfältig vorkommt.
Gruß Uwi

Nun zum eigentlichen Problem:
Die XPort haben offenbar einen Bug (oder ist es ein Feature?).
Wenn XPort mit gleicher IP im Netzwerk sind, antworten diese
nicht oder nur sehr sporadisch auf den UDP-Broadcast.

Mehrere Geräte mit gleicher IP im Netzwerk?

Never ever.

Du meinst vermutlich, mehrere XPort mit verschiedenen IP Adressen im gleichen Netzwerk :smile:

Wenn dem so sei ist es ganz normal, dass mehrere Antworten, sofern das UDP Paket so eine Art „Wer da“ Funktikon bei den XPorts auslöst. Da jedes Antwortpaket kein Broadcat mehr sein wird sondern ein Unicast Paket mit Quelladresse des jeweiligen XPort kann man die Pakete softwareseitig sauber auseinanderhalten.

Aber das ist alles viel zu schwammig umd amit Diagnose zu treiben. Den Wireshark Trace zu haben, das würde helfen.

Armin.

hab beim ersten versuch nicht sorgfältig genug gelesen, entschldige die unpassende Antwort.

Aber Dein Codeschnippsel ist entweder nicht genau, oder das Problem?

ReceiveBuffer bringt die Anzahl der tatsächlich empfangenen Bytes als Funktionsergebnis zurück, der Code müsste also ungefähr so sein:

if UDP.ReceiveBuffer(Buffer,SizeOf(Buffer)) > 0 then
… was empfangen

Dein Schnippsel wertet das Funktionsergebnis nicht aus.

Und warum mich das Ganze interessiert? Erstens weil wir als wackere Delphi Nutzer wohl zu einer aussterbenden Rasse gehören und deshalb vielleicht ein Kontakt nützlich wäre, und zweitens steht mir in den nächsten Wochen Ähnliches bevor. Im Moment schlage ich mich mit Datenerfassung per RS-485 herum, IP kommt als Nächstes wenn ich das gestemmt habe.

Armin.

Hallo,
mein Kollege, ein Spezialist für Netzwerke und auch versierter
Delphi-Programmierer hat sich der Sache angenommen. War aber
nicht ganzb einfach, weil er wohl da tief in Fkt. von WinSocket
eintauchen mußte.Da bin ich also ein gutes Stück weiter gekommen.

Auf den UDP-BroadCast

IdUDPClient1.SendBuffer('255.255.255.255',30718,SBuf,4);

mit SBuf = Commandbytes für den XPort wird dann wie folgt
das Ergebnis empfangen:

 if(IDUDPClient1.Binding.Readable())then
 begin
 Timer\_UDP.Interval := 500;
 bytes:=IDUDPClient1.Binding.RecvFrom(RBuff,8192,0,peerip,peerport);
 if(bytes\>0)then
 begin 
 .......

„bytes“ ist die Anzahl empfangener Bytes und „RBuff“ enthält die Antwort.
peerip,peerport zeigen die IP und Port an, von dem die Broadcastantwort kommt.

Damit scheint das Problem gelöst.
Ich finde also alle XPort im NW, sofern die auf den Broadcast antworten.
Problem ist derzeit nur die sehr magere Doku der XPort. Da wollen wir
aber mal direkt bei Lantronix anfragen.

Und warum mich das Ganze interessiert? Erstens weil wir als
wackere Delphi Nutzer wohl zu einer aussterbenden Rasse gehören

Es gibt immer noch einige, die sich das Leben nicht unnötig schwer
machen müssen und inkompatible Software machen, die beim
nächsten oder übernächsten Windows nicht mehr läuft.
Aber es werden immer weniger :frowning:

und deshalb vielleicht ein Kontakt nützlich wäre, und
zweitens steht mir in den nächsten Wochen Ähnliches bevor. Im
Moment schlage ich mich mit Datenerfassung per RS-485 herum,
IP kommt als Nächstes wenn ich das gestemmt habe.

RS485 haben wie auch überall im Einsatz.
Ich mache aber normal Hardware und habe auch sehr viele
Interface-Umsetzer für alle möglichen Zwecke :smile:
z.B. RS485-USB, RS485-ModBus/TCP, RS485-RS232, RS485-Bluetooth
und anders mehr.
Gruß Uwi

1 Like