Moin zusammen,
ich habe eine funktionierende Windows Anwendung welche ein
Indy TCPServer beinhaltet.
Dann habe ich eine Anwendung auf einem Android Gerät entwickelt mit einem
Indy TCPClient.
Beide Anwendungen kommunizieren und können sich Daten hin und her schicken (auch über Internet->feste
IP und Port vom Server).
Mir ging es jetzt um das Verständnis TCPIP.
Laut Wiki ist eine maximale Telegramlänge auf 1452 Byte beschränkt.
https://de.wikipedia.org/wiki/Transm...ntrol_Protocol
Ich habe jetzt erwartet, dass bei einem kleinen Test, die Telegramme ab 1452 Byte Länge, auf n-Anzahl Telegramme aufgeteilt wird. Dem ist aber nicht so.
Ich kann sogar 2000 Byte in einem Rutsch übertragen und beim Client kommt das in einem Telegramm an.
Im Client wird der Datenabruf wie folgt in einem extra Thread gemacht:
Execute Funktion:
Delphi-Quellcode:
while not Terminated do
begin
TCPClient.IOHandler.CheckForDataOnSource(100);
if not TCPClient.IOHandler.InputBufferIsEmpty then
begin
tmpInt := TCPClient.IOHandler.InputBuffer.Size;
SetLength(content, 0);
TCPClient.IOHandler.ReadBytes(content, tmpInt, False); //#$0d + #$0a immer noch am Ende
tmpStr := 'In: ' + tmpInt.ToString + '->' + BytesToString(content);
if tmpStr <> '' then
begin
if Assigned(OnThreadTCPReceive) then
OnThreadTCPReceive(Self, tmpStr);
end;
end;
end;
Frage 1: Warum können 2000 Byte überhaupt übertragen werden in einem Telegramm? Das ganze geht auch mit 4000 Byte
Ich habe das ganze mal weitergetrieben und bis auf über 5000 Byte Länge gegangen und da bricht er mir manchmal die Telegramme auf 2 Empfangs-Telegramme auf, allerdings ist das erste Telegram nicht immer gleich lang. Es ist also nicht so, dass konstant nach 2000 Byte (fiktive Annahme) ein zweites Telegramm entsteht.
Frage 2: Woher weiß ich beim Empfang, welche Telegramme zusammengehören, wenn das ReceiveEvent mehrmals getriggert wird und immer an unterschiedlicher Stelle ein neues Telegramm erstellt wird?
PS: Ja ich verschicke mit Absicht Bytes und das soll auch so bleiben