Entwickler-Ecke
Internet / Netzwerk - Record mit Indy 10 versenden
Bailey - So 13.03.05 10:07
Titel: Record mit Indy 10 versenden
Kann jemmand einen Tip geben wie ich einen Record mit idUDPclient unter Indy 10 versende..!?
Querkopf - Mo 29.05.06 21:28
Auch wenn der Thread schon etwas älter ist, würds mich auch brennend interessieren! Hab leider bisher nichts darüber finden können. Wäre zumindest mal schön, wenn jemand sagt, geht (und dann auch wie ;) ) oder geht nicht.
Gruss,
Pierre
Querkopf - Mi 31.05.06 15:02
Hi,
danke für Deine Antwort.
Das mit dem Protokoll ist soweit klar, denke ich. Ich habe jetzt mal versucht, das Record in einen String umzusetzen, den ich versende. Die Struktur, die das Programm erwartet ist folgende :
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| struct InSimInit // UDP packet to initialise the InSim system { char Id [4]; // ISI + zero word Port; // Port for UDP replies from LFS (0...65535) byte Flags; // Bit flags for options - see below byte NodeSecs; // Number of seconds between NLP or MCI packets (0=none) char Admin [16]; // Admin password (required if set in LFS host options) }; |
Ich habe jetzt erstmal folgende Konstanten :
Quelltext
1: 2: 3: 4: 5:
| const INSIM_INIT_ID = 'ISI'+#0; INSIM_FLAGS = #11; INSIM_NODESECS = #1; INSIM_ADMINPWD = 'xyz'+#0; |
und dann versuche ich folgendes zu senden :
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TInSimCommunication.sendData (data : String); begin udpClient.Host := '255.255.255.255'; udpClient.Active := true; udpClient.BroadcastEnabled := true; udpClient.Send(data); udpClient.BroadcastEnabled := false; end;
constructor TInSimCommunication.create (port : word); // erzeugt ein neues Kommunikationsobjekt der Klasse und initialisiert die Werte begin udpClient := TIdUDPClient.Create(nil); udpClient.Port := port; sendData(INSIM_INIT_ID+#0+#0+INSIM_FLAGS+INSIM_NODESECS+INSIM_ADMINPWD) // sendData(INSIM_INIT_ID+#0+#0+INSIM_FLAGS+INSIM_NODESECS+INSIM_ADMINPWD+#13) auch schon versucht end. |
Die beiden #0-Bytes repräsentieren das Word (den Port). Port 0 bedeutet (für das andere Programm), sende auf dem gleichen Port wie empfangen wird.
Ergebnis :
Das andere Programm empfängt meine Daten, gibt allerdings die Meldung 'Packet received before ISI packet', also gehen ich davon aus, dass ich das Record (oder auch das struct) noch nicht 100%ig richtig umgesetzt habe.
Oder ich habe einen anderen Denkfehler.
Gruss, Pierre
Narses - Mi 31.05.06 15:30
Moin!
Ausser, dass dein Admin-Password-String nicht 16 Bytes lang ist, wie in der Struktur vorgesehen, kann ich keinen Unterschied sehen.
Scheint, du solltest dich etwas mehr mit der Doku des Objektes beschäftigen, das du da zu kontaktieren versuchst. ;)
Alternative: mach einen UDP-Server auf und schick dir die Daten, dann zeigst du das als hex-String an, dann hast du auf jeden Fall die Garantie, dass du das sendest, was du senden wolltest. :D
cu
Narses
Querkopf - Mi 31.05.06 15:37
Hi,
nun ja, xyz war ja auch nur ein Platzhalter ;)
und sonderlich mehr ist dann nicht in der Doku vorhanden.
dennoch danke, werds mal mit dem Server-Test probieren.
Gruss,
Pierre
Querkopf - Mi 31.05.06 17:53
So, hab nochmal nachgezählt, das Passwort war tasächlich ein Byte zu kurz :autsch:
Nu klappts, so wies soll.
Danke!
Narses - Do 01.06.06 00:37
Moin!
Markierst du dann den Thread noch entsprechend, wenn dein Problem gelöst ist? Danke. ;)
cu
Narses
Querkopf - Do 01.06.06 13:13
Würde ich gerne, ist aber nicht mein Thread ;)
Narses - Do 01.06.06 13:37
Moin!
Umpf, stimmt... :? ;)
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!