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() 以第一个字节返回一个数据包

.NET SslStream:如何提取会话密钥?

如何将 PFX 证书文件应用于 SslStream 套接字侦听器?

c函数指针和指针函数如何使用何定义;如何调用使用

C 如何计算 sin() 和其他数学函数?

SslStream 接受证书?