c#SslStream的read()函数如何知道何时返回0?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#SslStream的read()函数如何知道何时返回0?相关的知识,希望对你有一定的参考价值。
我在c#中设置了一个ssl客户端,目前正在采取措施确保套接字读取尽可能可靠。 SslStream.read()文档表明当没有更多数据要读取时它会返回0,这究竟是什么意思?如果有一些延迟,那么没有数据准备好被读取怎么办? SslStream.read()在返回0之前是否有内置超时,或者我应该添加一些重试,直到判断连接丢失为止?
这是我接收数据的基本工作流程。
ulong expected = 8;
int offset = 0;
int read = 0;
do
{
read = sslStream.Read(buffer, offset, expected - offset);
offset += read;
} while (offset != expected && read != 0);
expected = byte8toulong(buffer);
Array.Clear(buffer, 0, buffer.Length);
read = 0;
offset = 0;
do
{
// The same as above but saving the data as it comes in.
} while(offset != expected && read != 0);
所以我想我的问题是在什么情况下阅读== 0?滞后会导致它返回0吗?我是否应该添加一个计时器/重试,直到我对连接被清除感到满意或者Read()已经做了类似的事情?
答案
套接字读取或写入应始终能够捕获异常(服务器端或客户端连接断开),将其包装在try catch中。
如果收到0则继续读取,因为这并不表示任何一方断开连接,直到您愿意设置某种超时。 (例外将处理大部分内容)但即使服务器连接断开,客户端连接也可以保持打开状态,即使客户端关闭,服务器连接也可以保持打开状态。
以上是关于c#SslStream的read()函数如何知道何时返回0?的主要内容,如果未能解决你的问题,请参考以下文章
SslStream .read() 以第一个字节返回一个数据包