我在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()已经做了类似的事情?
答案 0 :(得分:-3)
套接字读取或写入应始终能够捕获异常(服务器端或客户端连接断开),将其包装在try catch中。
如果收到0则继续读取,因为这并不表示任何一方断开连接,直到您愿意设置某种超时。 (例外将处理大部分内容)但即使服务器连接断开,客户端连接也可以保持打开状态,即使客户端关闭,服务器连接也可以保持打开状态。