AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

max Länge TCPIP

Ein Thema von AJ_Oldendorf · begonnen am 5. Mär 2025 · letzter Beitrag vom 11. Mär 2025
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.847 Beiträge
 
Delphi 12 Athens
 
#21

AW: max Länge TCPIP

  Alt 10. Mär 2025, 11:51
Ich verstehe was du meinst aber wenn ich vorher den InputBuffer auf <> Empty abfrage, dann bleibt mein Thread mit dem ReadLn nur bis zum nächsten gelesen Terminator hängen. Richtig?
Ja, schon, aber wenn keine Daten mehr kommen, wartet die Funktion einfach weiter. Wenn du das Programm dann beenden möchtest, kannst du den Lesevorgang nicht sauber beenden.

Auf welchen Wert sollte man das Timeout denn setzen? Erfahrungen?
Das kommt auf die Größe der Pakete an und wie lange es dauern darf, bis der Thread sich auf Anforderung beendet. Ich nehme meistens 100 bis 500 Millisekunden, weil das die Verzögerung gering genug hält, dass niemand beim Beenden bewusst warten muss, andererseits aber auch nicht zu oft versucht wird zu lesen.

Was passiert, wenn Timeout abläuft und er nicht bis zum Terminator gelesen hat? Bekomme ich dann wieder nur ein Teilstring von meinem Telegramm?
Das kannst du ja leicht testen. Soweit ich mich erinnere, wird der schon angekommene Teil nicht zurückgeliefert, sprich du bekommst einen Leerstring und beim nächsten Aufruf alles. Du kannst aber prüfen, ob ein Timeout aufgetreten ist, indem du ReadLnTimedOut abfragst.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
408 Beiträge
 
Delphi 12 Athens
 
#22

AW: max Länge TCPIP

  Alt Gestern, 08:35
@jaenicke:
Danke, ich prüfe das mal mit dem Leerstring und dem Timeout.

Sag mal, beim Server ist es aktuell so, dass wenn sich ein Client verbunden hat, die CPU Auslastung auf ca 6% von dem Programm geht.
Es werden keine Daten verschickt vom Server und vom Client. Einfach nur das Verbinden.
Wenn ich beim Server das Active auf False setze, geht die Auslastung sofort runter.
Hat jemand eine Idee dazu?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.847 Beiträge
 
Delphi 12 Athens
 
#23

AW: max Länge TCPIP

  Alt Gestern, 08:52
Zum Server lässt sich ohne Quelltext nicht viel sagen. Du kannst nur mal zwischendurch anhalten und schauen, wo du gerade bist.

Hast du vielleicht ein OnExecute mit Schleife, in der du kein Sleep(1) drin hast (wenn keine Anfrage da war), um die Schleifendurchläufe im Leerlauf zu begrenzen?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
408 Beiträge
 
Delphi 12 Athens
 
#24

AW: max Länge TCPIP

  Alt Gestern, 09:16
Also ich habe eine Form mit TIdTCPServer und verknüpften TIdServerIOHandlerStack.

Delphi-Quellcode:
procedure TMyForm.FormCreate(Sender: TObject);
begin
  IdTCPServer1.DefaultPort := 44001;
end;

procedure TMyForm.FormDestroy(Sender: TObject);
begin
  IdTCPServer1.Active := False;
end;

procedure TMyForm.IdTCPServer1Connect(AContext: TIdContext);
begin
  if Assigned(LogSL) then
  begin
    LogSL.Add('A client connected');
  end;
end;

procedure TMyForm.IdTCPServer1Disconnect(AContext: TIdContext);
begin
  if Assigned(LogSL) then
  begin
    LogSL.Add('A client disconnected');
  end;
end;

procedure TMyForm.IdTCPServer1Exception(AContext: TIdContext;
  AException: Exception);
begin
  if Assigned(LogSL) then
  begin
    LogSL.Add('A exception happend !');
  end;
end;

procedure TMyForm.IdTCPServer1Execute(AContext: TIdContext);
var
  tmpStr : String;
begin
  if IdTCPServer1.Active then
  begin
    if not AContext.Connection.IOHandler.InputBufferIsEmpty then
    begin
      tmpStr := AContext.Connection.IOHandler.ReadLn('#~#*', 300, -1);
      LogSL.Add(tmpStr);

      Timer1.Enabled := True;
    end;
  end;
end;
Das ist im groben alles...
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.847 Beiträge
 
Delphi 12 Athens
 
#25

AW: max Länge TCPIP

  Alt Gestern, 11:48
Pack mal am Ende des OnExecute ein Sleep(1) rein oder verwende AContext.Connection.IOHandler.CheckForDataOnSource(10); , damit die Anzahl der Aufrufe reduziert wird, dann sollte das nicht mehr passieren.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
408 Beiträge
 
Delphi 12 Athens
 
#26

AW: max Länge TCPIP

  Alt Gestern, 13:39
Der Aufruf von AContext.Connection.IOHandler.CheckForDataOnSource(10); vor dem if not AContext.Connection.IOHandler.InputBufferIsEmpty then hat geholfen bzgl der CPU Auslastung.
Du meintest ja sicherlich davor aufrufen oder?

Wie ist es beim Client?
Da habe ich das mit der CPU Auslastung bisher nicht festgestellt (der Lesevorgang mit "InputBufferIsEmpty" und "ReadLn" ist dort auch in einem Thread ausgelagert).
Sollte man dort auch TCPClient.IOHandler.CheckForDataOnSource(10); aufrufen?

Sleep(1) wird nicht gebraucht
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.847 Beiträge
 
Delphi 12 Athens
 
#27

AW: max Länge TCPIP

  Alt Gestern, 13:46
Sehr gut, ja, ich meinte davor aufrufen. Und Sleep(1) war nur eine Alternative, die brauchst du dann nicht, nein.

Im Client brauchst du das nicht, wenn du ReadLn verwendest. Wenn nicht, eines der beiden schon, so habe ich es ja auch in meinem Codebeispiel drin (das Sleep).
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
408 Beiträge
 
Delphi 12 Athens
 
#28

AW: max Länge TCPIP

  Alt Gestern, 13:59
Ja ich verwende im Client das ReadLn. Hatte nur gefragt, da ich es ja im Server auch verwende das ReadLn.

Danke für die Unterstützung bisher
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz