![]() |
Kommunikation mit TCP: Client jedesmal neu erzeugen?
Moin,
ich habe ein C#-Programm vor mir, was mit einem TCP-Client arbeitet und mit einem Gerät in Verbindung steht. Da wird für jede einzelne Kommunikation ein TCP-Client erzeugt, verbunden, kommuniziert und dann wieder getrennt und frei gegeben. Der Abfragezyklus läuft ständig und mit etwa 5 Hz (dahinter jedesmal eine Liste mit 4-6 Aufrufen). Da sind wir also ca. bei 30 Hz. Ist das so üblich? Ich bin etwas skeptisch, jedes Mal den Client anzulegen, zu verbinden und ihn danach inklusive disconnect-Abmeldung wegzuwerfen, um dann gleich wieder von vorne zu beginnen. Zumal einige Probleme auftreten, die auch mit Timing begründet werden könnten (bei .NET weiß man das ja nie genau außer dass es laaaangsam ist :wink:) Meine Erfahrungen mit TCP sind marginal, daher die Frage. Wie seht Ihr das? Ist das ständige Erstellen und Wegwerfen des Clients bei einer so kontinuierlichen Kommunikation sinnvoll? Zumal es eine direkte Leitung ist. Danke, Messie |
AW: Kommunikation mit TCP: Client jedesmal neu erzeugen?
Nein, es ist üblich eine TCP/IP-Verbindung zu öffnen und dann permanent offen zu halten.
Entscheidend ist dann aber das Protokoll auf Anwendungsebene (OSI Level 7). Angenommen dein Gerät ist wäre eine elektronische Wetterstation. Dein C#-Client würde dann den Befehl 'GETTEMP'#13#10 schicken. Das Gerät (=Server) antwortet mit '25.8C'#13#10. Dann schickt dein Client 'GETHUM'#13#10 - Gerät anwortet mit '72%'#13#10. Wichtig ist dabei das CR/LF, den es ermöglicht dem Server als auch dem Client das Ende eines Befehls zu erkennen. Ohne diese Vereinbarung, das ein CR/LF das Ende eines Befehls oder einer Antwort ist, ist es quasi unmöglich die einzelne Befehle und Antworten zu isolieren. Es gibt natürlich auch andere Protokolle wie z.B. dass Befehle und Antworten eine feste Länge haben. Aber ohne eine Vereinbarung zwischen Client und Server (diese Vereinbarung ist das Protokoll) kann es keine vernünftige Kommunikation über TCP/IP geben. Zusatzinfo: wenn eine TCP/IP-Verbindung über Stunden oder Tage besteht, aber keine Daten geschickt werden, dann besteht die Gefahr, dass die Verbindung durch das Betriebsystem oder einen dazwischenliegen Switch getrennt wird. Um das zu verhindern wird häufig in bestimmten Abständen ein ![]() Es gibt noch andere Möglichkeiten auf Socket-Ebene, aber die "NOP" Methode ist am sichersten. |
AW: Kommunikation mit TCP: Client jedesmal neu erzeugen?
Nun es gibt AFAIK durchaus Protokolle bei denen der Server/oder Client die Verbindung nach der Übertragung beenden. Ich hätte die Frage dahingehend verstanden ob es sinnvoll ist hierfür Wegwerfkomponenten zu generieren oder bei der nächsten Anfrage neu zu verbinden.
Was C# angeht bin ich leider völlig unbeleckt ... |
AW: Kommunikation mit TCP: Client jedesmal neu erzeugen?
Zitat:
Würde aber der Server (um beim Beispiel der Wetterstation zu bleiben) einfach die Verbindung nach Übertragung von Temperatur und Luftfeuchte beenden würde ich das als Fehlkonstruktion ansehen. Beispiel FTP: hier schickt der Client dem Server einen QUIT-Befehl und der Server beendet die Verbindung; so ist das eine saubere Sache. Normalerweise muss der Server die Verbindung aber offenhalten bis der der Client von sich aus trennt oder den Befehl zum Trennen gibt. FTP-Server trennen aber z.B. nach einen best. Timeout die Verbindung; auch deshalb muss der Client immer wieder NOPs schicken damit das nicht passiert. |
AW: Kommunikation mit TCP: Client jedesmal neu erzeugen?
@sx2008:
Das Gerät ist der Server und damit durchaus mit der Wetterstation vergleichbar. Ich bin deshalb nicht sicher, ob nicht Zeit verschwendet wird für die jeweilige neue Connection. Denn im Gerät sind ja nicht haufenweise multitaskfähige Komponenten incl. einem geeigneten Betriebssystem vorhanden. Mal eine Grundsatzfrage: wenn ich einen TCP- Client erzeuge und connecte, belegt er denn die Leitung und bremst andere Kommunikation aus? Kommuniziert er ständig oder ist nur die Kommunikation in so fern aufgebaut, dass der Server reagiert, falls eine Anfrage kommt? @ Bummi: genau so habe ich es gemeint. Nur, dass bei mir derzeit nicht nur die connection unterbrochen wird, sondern der Client jedesmal erzeugt und anschließend neu erzeugt wird. Grüße, Messie |
AW: Kommunikation mit TCP: Client jedesmal neu erzeugen?
Zitat:
Solange nichts gesendet wird ist auch das darunterliegende Ethernet frei. Erst wenn die TCP/IP-Verbindungen in die Tausende gehen wie z.B. bei einem Webserver muss man sich darum Gedanken machen. |
AW: Kommunikation mit TCP: Client jedesmal neu erzeugen?
Zitat:
Grüße, Messie |
AW: Kommunikation mit TCP: Client jedesmal neu erzeugen?
Zitat:
|
AW: Kommunikation mit TCP: Client jedesmal neu erzeugen?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 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