当我尝试从SslStream函数读取时,如果我没有设置连接超时,则Read()永远不会结束但如果我确实有超时异常。这家伙有同样的问题http://msdn.microsoft.com/en-us/library/system.net.security.sslstream.read.aspx。我不在这里做什么代码
public byte[] ReadBytes()
{
this.bufferGlobal.Clear();
byte[] buffer = new byte[this.bufferSize];
int recv = this.stream.Read(buffer, 0, buffer.Length);
while (recv != 0)
{
addBytes(buffer, ref bufferGlobal, recv);
recv = this.stream.Read(buffer, 0, buffer.Length);
}
return (byte[])this.bufferGlobal.ToArray(typeof(byte));
}
提前谢谢。
UPD:
我想我找到了答案。我可以在SslStream上设置读取超时等于1,这个值对socket alive没有意义(它的意思是你可以下载大文件而不用担心SslStream他不会关闭连接或中断接收数据)。我只是测试这个解决方案,但似乎工作正常。大家好。
答案 0 :(得分:2)
您正在从网络流中读取,这意味着您将不会遇到流的结束,直到另一方关闭其连接的一半。仅停止发送数据是不够的。因此,让其他程序在发送了它想要的所有数据后关闭连接。
答案 1 :(得分:2)
在连接关闭之前,流不会结束。这是所有未知长度的流的本质。
您需要提前知道长度,或者在连接关闭之前需要继续阅读。一种常见的方法是将流的字节长度作为64位int传输。所以你的流的前8个字节被读入int64,其余的是数据。
通常一次在流中读取一个“缓冲区”。
伪代码
而(!Stream.end) { i = Stream.Read(buffer,buffer.length) DestStream.Write(buffer,i) }
答案 2 :(得分:0)
有点晚了,但我正在使用带有以下修改的msdn代码
if (sb.ToString().IndexOf("a OK") != -1 || sb.ToString().IndexOf("a BAD") != -1 || sb.ToString().IndexOf("a NO") != -1)
{
break;
}
答案 3 :(得分:0)
如果适合您,请使用此工作补丁:
greater than 50