AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Stabile TCP-Verbindung mit ICS, ich kriegs nicht hin...
Thema durchsuchen
Ansicht
Themen-Optionen

Stabile TCP-Verbindung mit ICS, ich kriegs nicht hin...

Ein Thema von idontknow · begonnen am 13. Aug 2020 · letzter Beitrag vom 14. Aug 2020
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.168 Beiträge
 
Delphi 12 Athens
 
#1

AW: Stabile TCP-Verbindung mit ICS, ich kriegs nicht hin...

  Alt 13. Aug 2020, 14:00
KeepAlive ?
  Mit Zitat antworten Zitat
idontknow

Registriert seit: 21. Apr 2008
Ort: Schleswig-Holstein
60 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Stabile TCP-Verbindung mit ICS, ich kriegs nicht hin...

  Alt 13. Aug 2020, 14:29
Hi Rollo,

Danke für die Antwort. "keepalive" wäre wohl das Stichwort, wenn die Verbindung disconnecten würde, weil über einen längeren Zeitraum keine Daten übertragen werden. Das ist aber nicht mein Problem.

Der Client sendet irgendwann nicht mehr wenn

ClientSocket.Send(TWSocketData(@Text[1]), Length(Text));

aufgerufen wird. Text ist ein 128KB langer AnsiString mit "ABCDEFG...XYZABCDEFG...".

Es gibt zuvor kein OnDisconnect o.ä.

Gruß,

Oliver
Oliver
  Mit Zitat antworten Zitat
idontknow

Registriert seit: 21. Apr 2008
Ort: Schleswig-Holstein
60 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Stabile TCP-Verbindung mit ICS, ich kriegs nicht hin...

  Alt 13. Aug 2020, 14:40
Ach so, ganz vergessen:

Mein Test-Programm startet Client und Server auf demselben Rechner, Netzwerkkomponenten scheiden somit als Grund aus.

Hätte ich vielleicht erwähnen sollen...

@TurboMagic: Danke für die Info. Hab's gerade schon crossgepostet, mal sehen was da kommt...
Oliver
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
479 Beiträge
 
#4

AW: Stabile TCP-Verbindung mit ICS, ich kriegs nicht hin...

  Alt 13. Aug 2020, 14:50
Hallo!

Wenn es auch etwas anderes sein kann, nimm mORMot. Wenn du nicht den Server pollen willst, nimm WebSockets. mORMot musst du nicht installieren, sondern nur die Bibliothekspfad in Delphi 7 - 10.4 setzen.

Folgende Links sind hilfreich: Hilfe, Sourcecode, Forum

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
772 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Stabile TCP-Verbindung mit ICS, ich kriegs nicht hin...

  Alt 14. Aug 2020, 06:15
Bei mir läuft ICS 8.64 + Delphi 10.4 P1-3 in der freien Wildbahn auf ein paar hundert Kisten mit tausenden Verbindungen/Tag. Es sind keine Probleme bekannt.

[[ Dass tcp nur für kurzeitige Verbindungen genutzt werden sollte halte ich für ein Gerücht . Zu Windows 3.1 Zeiten wurden jeweils Verbindungen gekappt, über welche wenig oder keine Daten ausgetauscht wurden. Da du mit D10.4 rumspielst, ist Win3.1 als Zielsystem vom Tisch. ]]
Michael Gasser
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Stabile TCP-Verbindung mit ICS, ich kriegs nicht hin...

  Alt 14. Aug 2020, 07:28
Wir haben hier auch seit langer Laufzeit einen mini-messenger mit ICS verwirklicht am laufen ohne probleme, 365/7/24.
Was sich hin und wieder abschießt sind die Clients aber nie der Server.
Ob die Datenleitung qualmt oder Tagelang still seht, solange der Server mit "Listen" eingeschaltet ist, macht der sturr sein Ding.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#7

AW: Stabile TCP-Verbindung mit ICS, ich kriegs nicht hin...

  Alt 14. Aug 2020, 09:53
Zitat:
Gleichzeitiges Web-Browsen führt schneller zum Problem. Wenn ich mir irgendwelche Webseiten anschaue dauert es meist keine halbe Minute bis zum Problem.
Das lässt darauf schließen, dass Du kein (Programmier-/Delphi-/Software-)Problem mit Deiner Client-/Server-Verbindung hast, sondern eher ein allgemeines.

Das Stichwort könnte TcpNumConnections sein. Bitte mal die Suchmaschine Deiner Wahl damit füttern.

Als Ansatz hier mal ein paar Links zu den Suchergebnissen:

Configuring the Windows registry: Specifying TCP/IP settings (Windows Server 2003)
Tipps - TCP/IP - Maximale Anzahl gleichzeitig geöffneter Verbindungen
Fix for Windows 10 exhausted pool of TCPIP ports
TcpNumConnections TCP/IP Limitierung.
Beschleunigung / Einstellungen von TCP/IP Netzwerken

Das "Problem" zieht sich quer durch alle Windowsversionen, beginnend spätestens bei Windows NT.

Schau Dir bitte auch mal die Einstellungen für die MTU (Maximum Transmission Unit) an, sie sollte auf Client und Server gleich sein, damit sie einheitlich große / kleine Pakete verschicken. (Das sind die Datenpakete, in die Deine 128 kb zwecks "Versand über die Netzwerkleitung" aufgeteilt werden.)

Über ein Ping vom Client auf den Server kannst Du das recht einfach herausfinden:
Code:
ping -n 1 -l 2000 -f www.delphipraxis.net

Ping www.delphipraxis.net [138.201.18.17] mit 2000 Bytes Daten:

Paket müsste fragmentiert werden, DF-Flag ist jedoch gesetzt.

Ping-Statistik für 138.201.18.17:
    Pakete: Gesendet = 1, Empfangen = 0, Verloren = 1 (100% Verlust),
Den Wert hinter dem Paramter -l verkleinerst Du, bis die Ausgabe von Ping in etwa so aussieht:
Code:
ping -n 1 -l 1472 -f www.delphipraxis.net

Ping www.delphipraxis.net [138.201.18.17] mit 1472 Bytes Daten:

Antwort von 138.201.18.17: Bytes=1472 Zeit=20ms TTL=55

Ping-Statistik für 138.201.18.17:
    Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 20ms, Maximum = 20ms, Mittelwert = 20ms
Statt www.delphipraxis.net nimmst Du natürlich den Namen oder die IP des Servers.

Prüf' bitte auch, ob bei allen (oder zumindestenst einem Teil) der Clients die Ergebnisse übereinstimmen.

Die MTU kannst Du auch über die Registry "vereinheitlichen": Tipps - TCP/IP - Maximale Paketgrösse (MTU) der Datenübertragung festlegen Sie beträgt die per Ping ermittelte Paketgröße + 20 Byte für den "Verwaltungheader", wäre bei der Kommunikation zwischen meinem Rechner und dem Server der DelphPraxis also mit 1492 Byte anzusetzen.

Deine 128 kb Daten werden, bei einer MTU, wie in diesem Beispiel, auf 128 kb (-> 128 * 1024) / 1472 = 89,043478260869565217391304347826 Pakete, also 90 Pakete aufgeteilt.

Wenn die Größe von 128 kb je Paket nicht zwingend ist, kannst Du sie so anpassen, dass sie immer ein Vielfaches der oben ermittelten Paketgröße (hier also 1472 * x) enthalten. Dadurch wird der "Aufwand" für den Datenaustausch zwischen Client und Server verringert. Aber das fiele dann implementierungstechnisch eher unter "Chromleiste", könnte aber dabei helfen, das Problem zu verkleiner, bestenfalls zu verhindern.

Das Ganze hier muss also jetzt nicht zwingend "die Lösung" des Problems sein, kommt aber eventuell der Quelle des von Dir beobachteten "Phänomens" etwas näher.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 15:38 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-2025 by Thomas Breitkreuz