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