TcpClient
客户端,它将消息发送回该客户端。[使用NetworkStream.Read
类读取此数据时,我可以使用count
参数指定要读取的字节数,读取完成后,这将使TcpClient.Available
减少count
。从docs:
计数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
}
}
[将TcpClient
上可用的500的前12个字节读入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
,documentation的SslStream.Read
指出count
表示要读取的最大字节数。
计数Int32
Int32
,包含要从此流读取的最大字节数。虽然它只读取这12个字节,但我不知道其余的488个字节在哪里。
在SslStream
或TcpClient
的文档中,我找不到任何指示使用SslStream.Read
刷新流或以其他方式清空client.Available
的信息。这样做的原因是什么(以及在何处记录)?
TcpClient.Available
等价,这就是我要的[[not。我想知道为什么发生这种情况,这里没有介绍。
我有一个连接到服务器的TcpClient客户端,该客户端将消息发送回客户端。当使用NetworkStream.Read类读取此数据时,我可以指定要读取的字节数...此外,您读取12个字节的代码不正确,这可能会影响您所看到的内容。