2
TcpClient client = new TcpClient("69.147.112.160", 443);
SslStream sslStream = new SslStream(client.GetStream(),false,
                                    ValidateServerCertificate,null);
try
{
    sslStream.AuthenticateAsClient("mail.yahoo.com");
}
catch (AuthenticationException e)
{

    return;
}
byte[] messsage = Encoding.UTF8.GetBytes(".<EOF>");
sslStream.Write(messsage);
sslStream.Flush();
byte[] buffer = new byte[4096];
int bytes2 = -1;
do
{
    /**************************************************
     *** JUST A LINE BELOW ALL buffer BYTES ARE ZERO!**
     *************************************************/

    bytes2 = sslStream.Read(buffer, 0, 4096);
    m_sockClient.Send(buffer, bytes2, 0);
} while (bytes != 0);
4

2 回答 2

2

buffer调用未填充的所有字节都Read将为零;这是标准的 C#。

如果其中的每个最后一个字节都是零,那么只有两件事可以负责:

  • 您从流中读取了真正的空字节(不太可能)
  • Read不读取任何内容(在这种情况下它会返回0——您绝对应该检查返回值)
于 2011-06-18T16:04:49.020 回答
0

bytes2 = sslStream.Read(buffer, 0, 4096);最多读取4096 个字节buffer,而不是 4096 个字节。它阻塞直到至少一个字节被读取并返回读取的字节数。所以在方法调用之后,buffer将具有与方法调用之前相同的内容(例如,用空值填充),除了第一个bytes2字节,它是从服务器接收到的字节。

于 2011-06-18T16:05:58.607 回答