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# です。

最後の 1 バイトがすべてゼロの場合、原因は次の 2 つだけです。

  • ストリームから実際の null バイトを読み取る (可能性は低い)
  • Read何も読み取らない (その場合は戻ります0--戻り値を確実にチェックする必要があります)
于 2011-06-18T16:04:49.020 に答える
0

bytes2 = sslStream.Read(buffer, 0, 4096);正確に 4096 バイトではなく、最大4096 バイトを に読み込みます。buffer少なくとも 1 バイトが読み取られるまでブロックし、読み取られたバイト数を返します。したがって、メソッド呼び出しの後は、サーバーから受信したバイトであるbuffer最初のバイトを除いて、メソッド呼び出しの前と同じ内容になります (たとえば、null で埋められます) 。bytes2

于 2011-06-18T16:05:58.607 に答える