【问题标题】:sslStream.Read problem: all bytes read are 0sslStream.Read 问题:读取的所有字节都是 0
【发布时间】:2011-06-19 00:05:58
【问题描述】:
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);

【问题讨论】:

    标签: c# tcpclient sslstream


    【解决方案1】:

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

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

    • 您从流中读取了真正的空字节(不太可能)
    • Read 不读取任何内容(在这种情况下它返回 0 -- 你应该肯定检查返回值)

    【讨论】:

    • 谢谢,您的回答似乎很有帮助,但您能告诉我我的代码有什么问题吗?我的错在哪里?
    • @RoozbehSharafi:正如我已经说过的,您应该检查Read 的返回值。就像示例文档一样:msdn.microsoft.com/en-us/library/…
    • 如果你仔细阅读代码,他确实检查返回值,并且只回显接收到的字节数。我有一个类似的问题,可能与他的问题有相同的解决方案:即使远程服务器什么也没发送,每次调用 s.Read() 都会返回 5 个字节的零。
    • @NathanWiebe:正如所写,代码不检查返回值。它检查bytes 变量,但返回值存储在bytes2 中。在任何情况下,检查只发生在他发送字节之后。在您的情况下,您也有一些错误,或者流确实包含空字节。
    • 朋友,我不知道你在看哪个帖子。 1.上面的帖子非常清楚地使用返回值(bytes2) - 作为 Socket.Send 函数的第二个。是的,他确实在 do...while 条件中有一个明显的错字,但他确实检查并使用了返回值。鉴于他的程序可以编译(即 bytes 变量必须存在于其他地方),由 do...while 错字引起的无限循环绝不会减损他试图提出的观点:SslStream.Read() 函数肯定确实返回一个非零数量的 0 字节(在我的例子中是 5 个字节的零,一遍又一遍)。
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回答,但我知道这一点。主要问题是所有字节都为零,而不仅仅是其中一些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多