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