首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net SslStream写入/读取问题

.Net SslStream写入/读取问题
EN

Stack Overflow用户
提问于 2016-05-05 22:30:43
回答 3查看 2.4K关注 0票数 4

当我阅读a .Net SSLStream时,我似乎不可能一下子读完所有内容。read方法总是只获取第一个字节。无论数据大小或缓冲区大小,我都需要循环来获取剩余数据。

示例:

客户端

代码语言:javascript
复制
var message = new byte[]{1,2,3,4,5};
   sslStream.Write(messsage);
   sslStream.Flush();

服务器

代码语言:javascript
复制
byte[] buffer = new byte[4000];
bytes = sslStream.Read(buffer, 0, buffer.Length);

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

EN

回答 3

Stack Overflow用户

发布于 2016-05-14 01:15:35

流式API不承诺每次读取时返回特定的字节数。您可以读取从1开始的任意数量的字节。即使您请求更大的块,即使您发送更大的块,YOur代码也必须能够按字节接收数据。

解决这个问题的最好办法是不使用套接字。使用更高级别的应用程序接口,如WCF、SignalR、HTTP等。

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

如果你不想要这样的东西,你需要在一个循环中进行读取,直到你收到所需的字节数。

票数 3
EN

Stack Overflow用户

发布于 2016-05-23 08:13:22

@usr关于什么时候应该实现流读取的方式是完全正确的,而且你不需要任何东西。另一方面,发生在我身上的事情也发生在@Bubba上。代码曾经是有效的,但现在不起作用了。原因?微软.net框架更新。更多详细信息请访问:https://connect.microsoft.com/VisualStudio/feedback/details/2590316/windows-10-update-kb3147458-changes-behavior-of-sslstream-read-beginread-endread

票数 2
EN

Stack Overflow用户

发布于 2016-05-13 03:15:25

我也遇到了同样的问题。几周前代码还在运行--现在不能运行了。我想知道是不是微软的某个更新把它弄坏了?

我创建了一个解决方案(hack) --直到我能找出问题所在:(在类级别)

代码语言:javascript
复制
string previousChar = null;

(在TcpClient.GetStream.Begin的回调函数中)

代码语言:javascript
复制
        if ((previousChar == null) && (bytesRead == 1))
        {
            previousChar = Encoding.ASCII.GetString(readBuffer, 0, bytesRead);
        }
        // Convert the byte array the message was saved into
        if (bytesRead > 6)
        {
            message = Encoding.ASCII.GetString(readBuffer, 0, bytesRead);
            if (previousChar != null)
            {
                message = previousChar + message;
                previousChar = null;
            }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37053288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档