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);
答案 0 :(得分:3)
buffer
中未被Read
调用填写的所有字节均为零;这是标准的C#。
如果其中的每个最后一个字节都为零,则只能负责两件事:
Read
没有读取任何内容(在这种情况下会返回0
- 您应该肯定检查返回值)答案 1 :(得分:0)
bytes2 = sslStream.Read(buffer, 0, 4096);
将最多 4096字节读入buffer
,而不是4096字节。它会阻塞,直到读取至少一个字节并返回读取的字节数。因此,在方法调用之后,buffer
将具有与方法调用之前相同的内容(例如,填充空值),但第一个bytes2
字节除外,它们是从服务器接收的字节。 / p>