У меня TcpClient
клиент, подключенный к серверу, который отправляет сообщение обратно клиенту.
При чтении этих данных с помощью класса NetworkStream.Read
я могу указать количество байтов, которое я хочу читать с помощью параметра count
, который уменьшит TcpClient.Available
на count
после завершения чтения. Из документов :
count Int32
Максимальное количество байтов для чтения из текущего потока.
Например :
public static void ReadResponse()
{
if (client.Available > 0) // Assume client.Available is 500 here
{
byte[] buffer = new byte[12]; // I only want to read the first 12 bytes, this could be a header or something
var read = 0;
NetworkStream stream = client.GetStream();
while (read < buffer.Length)
{
read = stream.Read(buffer, 0, buffer.Length);
}
// breakpoint
}
}
Считывает первые 12 байтов из 500, доступных на TcpClient
в buffer
, а проверка client.Available
в точке останова даст (ожидаемый) результат 488
( 500 - 12).
Теперь, когда я пытаюсь сделать то же самое, но с использованием SslStream
на этот раз, результаты довольно неожиданны для меня.
public static void ReadResponse()
{
if (client.Available > 0) // Assume client.Available is 500 here
{
byte[] buffer = new byte[12]; // I only want to read the first 12 bytes, this could be a header or something
var read = 0;
SslStream stream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
while (read < buffer.Length)
{
read = stream.Read(buffer, 0, buffer.Length);
}
// breakpoint
}
}
Этот код будет читать первые 12 байтов в buffer
, как и ожидалось. Однако при проверке client.Available
в точке останова теперь будет получен результат 0
.
Как и обычный NetworkStream.Read
, документация для SslStream.Read
гласит, что count
указывает максимальное количество байтов для чтения.
count Int32
A Int32
, которое содержит максимальное количество байтов для чтения из этого потока.
Хотя он читает только эти 12 байтов, и больше ничего, мне интересно, где остальные 488 байтов go.
В документах для SslStream
или TcpClient
я не смог найти ничего, указывающего, что использование SslStream.Read
очищает поток или иным образом очищает client.Available
. Какова причина для этого (и где это задокументировано)?
Существует этот вопрос , который запрашивает эквивалент TcpClient.Available
, то есть не , что я и просил. Я хочу знать , почему это происходит, что там не рассматривается.