sslStream.Read проблема: все прочитанные байты равны 0 - PullRequest
2 голосов
/ 18 июня 2011
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);

Ответы [ 2 ]

3 голосов
/ 18 июня 2011

Все байты в buffer, которые не были заполнены вызовом Read, будут равны нулю; это стандарт C #.

Если в каждом последнем байте есть ноль, ответственность может быть только за две вещи:

  • Вы читаете реальные нулевые байты из потока (маловероятно)
  • Read ничего не читает (в этом случае возвращается 0 - вы должны определенно проверить возвращаемое значение)
0 голосов
/ 18 июня 2011

bytes2 = sslStream.Read(buffer, 0, 4096); читает до 4096 байт в buffer, не совсем 4096 байт.Он блокируется, пока не будет прочитан хотя бы один байт, и возвращает количество прочитанных байтов.Поэтому после вызова метода buffer будет иметь то же содержимое, что и до вызова метода (например, заполнено нулями), за исключением первых bytes2 байтов, которые являются байтами, полученными с сервера.

...