Thema: Delphi LAN-Anbindung

Einzelnen Beitrag anzeigen

Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#16

Re: LAN-Anbindung

  Alt 1. Jan 2010, 22:42
Zitat von Jens Hartmann:
..erklären könntest.
Hallo Jens Hartmann, ich fasse mal alles zusammen, um sicherzustellen das wir vom selben reden.

1. Du hast eine Hardware, die mit einer Server-Software eine TCP/IP Socket Verbindung, zwecks Messdatenübermittlung unterhält.
2. Du möchtest herausfinden, wie das Protokoll zwischen Hardware und Server-Software aussieht, um im Endeffekt einen eigenen Software Server nachzubauen.

Was ist bisher bekannt?

1. Das Protokoll und der Datentransport über Socket

Das Protokoll besteht aus: 4 Byte Längenangabe + 13 Byte Daten
Das ist einfach so zu verstehen, dass 17 Byte Daten von deiner Hardware, in den Empfangsbuffer des Socket geschrieben werden.
cbRcv := Recv(ClientSocket, Buffer[cb], 32768, 0);
Weitere Vorgehensweise.

1. Du brauchst erstmals einen Server
2. Wie kann man nun auf die Längeninformationen die in den ersten 4 Byte des Header enthalten sind zugreifen.
3. Wie sind die restlichen 13 Byte Daten im Header aufgebaut, und wie kann man darauf zugreifen?


Also gehen wir dies mal der Reihe nach durch.
Punkt 1. Du brauchst erstmals einen Server. Wenn du gut in Socket API Programmierung eingearbeitet bist, kein Problem für Dich.
Wenn nicht, verwende den Server den ich Dir upgeloaded habe, dort sind nur recv und send für Dich interessant (Debug Breakpont).
Grundzüge der Socket API Programmierung sollten vorhanden sein, send, recv, select und Network Byte Order.
Socket API desshalb, weil für die Datenanalyse (13 Byte und Handshake = send) die API geeigneter ist, als eine Komponente.
Wenn Du genau die Internas einer Server-Komponente kennst, kannst Du natürlich auch diese verwenden.

Punkt 2. Wie kann man nun auf die Längeninformationen die in den ersten 4 Byte des Header enthalten sind zugreifen.
Da die Längeninformation in den ersten 4 Byte des Empfangsbuffers "Buffer" enthalten sind, einfach die ersten 4 Byte in eine
4 Byte Variable (integer) kopieren.
move(Buffer, IntegerVariable, SizeOf(Integer)); danach mit ntohl (TCP/IP network order to host byte order) in die Längeninfo umwandeln.

Auf Punkt 3. Wie sind die restlichen 13 Byte Daten im Header aufgebaut, und wie kann man darauf zugreifen?
möchte ich erst dann genauer eingehen, wenn du Punkt 1 + 2 (Server + Längeninformationen) hast.

lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat