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.
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