2015-08-11 17 views
6

Ich baue einen Mock Server mit TCPListener.C# - eine bestehende Verbindung wurde von der Software in Ihrem Hostcomputer abgebrochen. Fehler

Als ich versuchte, meinen Code zu debuggen, indem ich den Client ausführte, konnte ich die Anfrage auf dem Server lesen. Auf der Clientseite wird jedoch eine Ausnahme ausgelöst. Hier ist die Ausnahme, die ich von der Ablaufverfolgung bekam:

System.ServiceModel.CommunicationException: Die Socket-Verbindung wurde abgebrochen. Dies kann durch einen Fehler beim Verarbeiten Ihrer Nachricht oder das Überschreiten einer Empfangszeitüberschreitung durch den Remote-Host oder durch ein zugrunde liegendes Netzwerkressourcenproblem verursacht werden. Local Socket Timeout war '00: 05: 00'. --- & gt; System.IO.IOException: Daten von der Transportverbindung konnten nicht gelesen werden: Eine hergestellte Verbindung wurde von der Software in Ihrem Hostcomputer abgebrochen. --- & gt; System.Net.Sockets.SocketException: Eine bestehende Verbindung wurde von der Software im Hostsystem abgebrochen

Hier ist der Code von I auf dem Server implementiert:

TcpClient client = listener.AcceptTcpClient(); 
NetworkStream nwStream = client.GetStream(); 
byte[] buffer = new byte[client.ReceiveBufferSize]; 
int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize); 
var dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead); 

byte[] sendBytes = null; 
try 
{ 
    var output = "POST HTTP/1.1 200 OK\r\n"; 
    output += "Server: Apache-Coyote/1.1\r\n"; 
    output += "Content-Type: application/soap+xml\r\n"; 
    output += "Content-Length: 632\r\n"; 
    output += "Date: Thu, 06 Aug 2015 02:06:39 GMT\r\n\r\n"; 
    output += 
     "<S:Envelope xmlns:S=\"http://www.w3.org/2003/05/soap-envelope\"><S:Header></S:Header><S:Body></S:Body></S:Envelope>"; 
    sendBytes = Encoding.ASCII.GetBytes(output); 
    nwStream.Write(sendBytes, 0, sendBytes.Length); 
    nwStream.Flush(); 
} 
catch (SocketException se) 
{ 
    throw; 
} 

client.Close(); 

bearbeiten

Ich habe auch versucht, meine Firewall zu deaktivieren, aber die Ausnahme tritt immer noch auf.

+0

Sie schließen die Verbindung, bevor der Client die Daten lesen konnte. Schließen Sie NIE eine Verbindung auf dem Server. Der Client sollte immer die Verbindung öffnen und die Verbindung schließen. Um die Anwendung auf dem Server zu schließen, erfassen Sie das Close-Ereignis, das auftritt, wenn der Client die Verbindung schließt. – jdweng

Antwort

2

Einstellen der richtigen Content-Length behoben.

Wenn die Inhaltslänge größer als die tatsächliche Länge ist, wartet die Clientseite weiterhin auf die verbleibenden Teile der Antwort. Aber da der Server bereits mit dem Senden der Antwort fertig ist, wird der Prozess beendet.

Verwandte Themen