c# - .Net SslStream 写/读问题

标签 c# .net ssl stream sslstream

当我阅读 .Net SSLStream 时,我似乎无法一次性阅读全部内容。 read 方法总是只获取第一个字节。无论数据或缓冲区大小如何,我都需要循环获取剩余数据。

示例:

客户端

var message = new byte[]{1,2,3,4,5};
   sslStream.Write(messsage);
   sslStream.Flush();

服务器

byte[] buffer = new byte[4000];
bytes = sslStream.Read(buffer, 0, buffer.Length);

我做错了什么吗?为什么它在第一次读取时只读取一个字节?

最佳答案

流式 API 不 promise 您每次读取返回特定数量的字节。您可以从 1 开始读取任意数量的字节。您的代码必须能够按字节处理接收数据,即使您请求更大的数据 block 并且发送更大的数据 block 也是如此。

最好的解决方法是不使用套接字。使用更高级别的 API,例如 WCF、SignalR、HTTP...

如果您坚持,您可能应该使用 BinaryReader/Writer 来发送您的数据。这使它变得非常容易。

如果您不想要其中的任何一个,您需要循环读取,直到您收到所需的字节数

关于c# - .Net SslStream 写/读问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37053288/

相关文章:

.net - C++中的 “^”符号是什么?

c# - 使用证书文件通过 SSL 连接到 Web 服务

php - 在 Codeigniter 中将 http 重定向到 https

java - 如何在 Java 1.6 中使用 ECC 私钥?

c# - Lambda 表达式对比不同的对象

c# - Msbuild 使用唯一文件名复制和展平

c# - 是否可以仅使用免费软件将文档转换为 PDF 或在 C# 中编辑 PDF?

c# - 是否可以使用匹配结果的反向引用作为另一个捕获组的匹配?

c# - 单击按钮时更改母版页的背景图像 url

c# - 有哪些调试超时的好方法? (C#)