Закрыть BufferedStream без отключения TcpClient?
Я пытаюсь отправить изображение через TcpClient и BufferedStream. Проблема в том, что я не могу отправить данные без отключения TcpClient.
Отправить данные:
while ((bytesread = bufferedinput.Read(buffer, 0, sizeBuffer)) > 0)
{
//Sending data
bufferedoutput.Write(buffer, 0, bytesread);
}
Получить данные:
while ((bytesread = bufferedinput.Read(buffer, 0, buffsize)) > 0)
{
bufferedoutput.Write(buffer, 0, bytesread);
}
где:
NetworkStream serverStream = client.GetStream();
а также BufferedStream bufferedoutput = new BufferedStream(serverStream);
Проблема в том, что я должен сыграть bufferedoutput.Close();
на стороне клиента, чтобы получить данные, полученные сервером, но это отключает мой клиент, что является проблемой. Какие-либо предложения?
2 ответа
Очевидно, что при закрытии объекта NetworkStream, связанного с объектом TcpClient, клиент отключается. Так как TCP является протоколом, основанным на потоке, вы можете сделать только одно из двух, либо 1.] использовать networkstream.readtimeout для отключения, если данные не доступны до истечения времени ожидания, ИЛИ 2.] разработать протокол, чтобы сообщить получателю о длине данных отправитель готов отправлять и читать только эту длину байтов.