Autor Beitrag
Sharp_Schorsch
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 02.06.10 12:27 
Über eine bereits geöffnete TCP/IP-Verbindung (mit Port 8000 - (Commonly used for internet radio streams)) soll parallel ein 2. Datenstrom gesendet und empfangen werden.

Ablauf: a) Datensatz 1 wird gesendet (XML-Telegramm), ca 30s später soll ein zugehöriges XML-Telegramm empfangen werden.
b) Zunächst manuell, später zyklisch (Rate von ca 500ms) soll ein zweites Telegramm versendet werden, dessen Antwort sofort erwartet wird und in der GUI ausgegeben werden soll.

Das Senden beider Telegramme erfolgt somit aus der gleichen GUI über eine TCP/IP Verbindung (namespace System.Net.Sockets.TcpClient) das Senden des ersten Datenstroms. Mithilfe zweier Backgroundworker funktioniert die Bedienung der GUI auch nach Absenden des ersten Datenstromes und während des Wartens auf die korrespondierende Antwort problemlos.

Jedoch wird die erwartete Antwort des 2.Datensatzes erst empfangen und angezeigt, wenn auch die Antwort des ersten Datensatzes gekommen ist.

System.Net.Sockets.TcpClient
System.Net.Sockets.Networkstream

Den gesamten Quellcode zu schicken, ist vielleicht etwas zu unübersichtlich und noch verfrüht, weil ich ggf ein konzeptionelles Problem habe und nicht weiß, inwieweit mein Vorhaben überhaupt möglich ist.

Ich hab es bisher auf 2 verschiedenen Wegen versucht:

a) Eine Instanz der Klasse, die für die Kommunikation zuständig ist, und dann über 2 Backgroundworker jeweils die Übertragung gestartet. Dabei wird aber anscheinend für beide Datenübertragungen derselbe Networkstream verwendet.
b) 2 Instanzen gebildet, die dann dieselbe TCP/IP Verbindung nutzen sollen, aber durch die Backgroundworker in verschiedenen Threads arbeiten und somit auch verschiedene Networkstreams nutzen.

Gibt es Meinungen dazu oder sollte ich zum besseren Verständnis einen bestimmten Code hinzufügen ?
ujr
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 102
Erhaltene Danke: 12



BeitragVerfasst: So 06.06.10 21:12 
Hi,

user profile iconSharp_Schorsch hat folgendes geschrieben Zum zitierten Posting springen:
Wartens auf die korrespondierende Antwort


Vermutlich ist das das Problem. Du "wartest" ja an zwei Stellen.

Ich würde das Senden über eine Art Warteschlange erledigen und an einer Stelle eingehende Daten lesen. Welche Antwort das ist, sollte sich dann aus dem Inhalt ergeben.
Sharp_Schorsch Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 07.06.10 17:01 
Zitat:
Vermutlich ist das das Problem. Du "wartest" ja an zwei Stellen.


Ja, das war in der Tat ein Problem. Ich dachte, ich hätte es dadurch ausgeschlossen, daß ich es mit 2 verschiedenen Instanzen der Kommunikationsklasse gemacht habe. Aber es klappte dann doch erstmal nicht.

Das Problem war, daß ich die Klasse a) als private und sealed definiert und b) als Singleton instanziiert habe. Deshalb wurde die Kommunikation dort geblockt und lief nicht parallel.

Jetzt klappt es.

Fazit: es ist also möglich, bei geöffneter TCP/IP Verbindung über Port 8000 von 2 verschiedenen Instanzen aus Daten zu senden und zu empfangen.