Daten können nicht in die Transportverbindung geschrieben werden: Eine bestehende Verbindung wurde vom Remote-Host zwangsweise geschlossen

8

Ich habe einen Update-Server, der Client-Updates über TCP-Port 12000 sendet. Das Senden einer einzelnen Datei ist nur beim ersten Mal erfolgreich, aber danach erhalte ich eine Fehlermeldung auf dem Server "Daten können nicht auf die Transportverbindung geschrieben werden : Eine bestehende Verbindung wurde vom Remote-Host zwangsweise geschlossen ". Wenn ich den Update-Dienst auf dem Server neu starte, funktioniert es wieder nur einmal. Ich habe einen normalen Multithread-Windows-Dienst.

SERVERCODE

%Vor%

Ich muss etwas beachten, dass mein Windows-Dienst (Server) Multithread ist.

    
xnoor 05.09.2010, 11:14
quelle

1 Antwort

0

Richten Sie am empfangenden Ende eine while-Schleife ein, um zu hören, bis keine Daten mehr vorhanden sind, und beenden Sie dann elegant: Schließen Sie den Stream und den Client. Die Framework-TCP-Bibliotheken betrachten es als Problem, eine Verbindung beim Thread-Exit zu schließen und werfen daher die Ausnahme, die Sie sehen, auf.

Dies wird Sie auch vor einem zeitweiligen Problem bewahren, das Sie wahrscheinlich sehen werden, sobald Sie das aktuelle Problem behoben haben: Stream.Read mit einem Längen-Spezifizierer gibt Ihnen nicht immer den vollen Puffer jedes Mal. Es sieht so aus, als würdest du (bis zu) 2kb Chunks senden und irgendwie in einen (1-shot) 1kb Puffer empfangen, so dass du auch XML-Exceptions bekommen kannst.

Wenn das nicht genug Detail ist, fragen Sie und ich werde einen alten TcpClient-Code ausgraben.

    
ssamuel 26.08.2011 13:11
quelle

Tags und Links