Asynchrone Sockets und Threads

16/10/2008 - 17:10 von Alexander Gnauck | Report spam
Hallo,

ich verwende asynchrone Sockets und bin auf ein Problem gestoßen welches
nur auftritt wenn ich einen Vorgang in einem neuen Thread starte.
Nach langem debuggen habe ich leider immer noch keine Lösung gefunden
und sehe den Wald vor lauten Bàumen nicht mehr.

Ich habe eine kleine Beispielanwendung geschrieben mit welcher sich das
Problem nachvollziehen làsst. Die Beispielanwendung macht einfach einen
connect zu www.google.de auf Port 80 und fràgt die Webseite über HTTP
ab. Wenn die Protocol Klasse in einem neuen Thread ausgeführt wird kommt
es in SocketEx Zeile 119 immer zu folgender Exception.

A first chance exception of type 'System.IO.IOException' occurred in
System.dll
In die Übertragungsverbindung können keine Daten geschrieben werden:
Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert,
da der Socket nicht verbunden ist und (beim Senden über einen
Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde.


Socket sollte verbunden sein, da der asynchrone Sendvorgang aus dem
EndConnect callback gestartet wird.
Ich vermute es liegt am NetworkStream welcher nicht Thread Safe ist.

Die Beisiel Anwendung kann von hier geladen werden:
http://alex.ag-software.de/SocketTest.zip

Vielen Dank für eure Hilfe.

Gruß
Alex
 

Lesen sie die antworten

#1 Peter Fleischer
16/10/2008 - 20:53 | Warnen spam
"Alexander Gnauck" schrieb im Newsbeitrag
news:48f75951$0$17119$

Socket sollte verbunden sein, da der asynchrone Sendvorgang aus dem
EndConnect callback gestartet wird.



Hi Alex,
solche Lösungen sollte man besser nach folgenden Prinzip organisieren:
Thread 1 startet asynchrone Aktivitàt und bekommte Steuerung vom asynchronen
Thread 2, wenn dieser beendet ist. Danach startet Thread 1 die nàchste
asynchrone Aktivitàt als Thread 3 usw. Das funktioniert bei mir problemlos.
Zur Steuerung des Ablaufes kann man ein Queue-Objekt nutzen.

Viele Grüsse
Peter

Ähnliche fragen