Я строю Mock-сервер с использованием TCPListener.C# - установленное соединение было прервано программным обеспечением вашего хост-компьютера Ошибка
Когда я попытался отладить мой код, запустив клиент, я смог прочитать запрос на сервере. Но на стороне клиента возникает исключение. Вот исключение, которое я получил из трассы:
System.ServiceModel.CommunicationException: Соединение сокета было прервано. Это может быть вызвано ошибкой обработки вашего сообщения или превышением времени приема удаленным хостом или проблемой сетевого ресурса. Локальный тайм-аут гнезда был «00: 05: 00». --- & gt; System.IO.IOException: невозможно прочитать данные из транспортного соединения: установленное соединение было прервано программным обеспечением вашего хост-компьютера. --- & gt; System.Net.Sockets.SocketException: установленное соединение было прервано с помощью программного обеспечения в хост-машине
Вот код I реализован на сервере:
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();
Edit
Я также пытался отключить мой брандмауэр, но исключение все еще происходит.
Вы закрываете соединение, прежде чем клиент имеет возможность считывать данные. НИКОГДА не закрывайте соединение на сервере. Клиент должен всегда открывать соединение и закрывать соединение. Чтобы закрыть приложение на сервере, запишите событие закрытия, которое произойдет, когда клиент закроет соединение. – jdweng