Thema: Delphi max Länge TCPIP

Einzelnen Beitrag anzeigen

AJ_Oldendorf

Registriert seit: 12. Jun 2009
404 Beiträge
 
Delphi 12 Athens
 
#1

max Länge TCPIP

  Alt 5. Mär 2025, 11:27
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
  Mit Zitat antworten Zitat