从TCPClient读取时延迟

时间:2012-04-17 10:44:26

标签: .net tcpclient

我有以下代码,它将未知大小的数据读入内存流。

Dim cl As New Net.Sockets.TcpClient()
cl.Connect(host, port)
Dim st As IO.Stream = cl.GetStream()
Dim bytes(50000) As Byte
Dim mem As New IO.MemoryStream()
Dim len As Integer = 0
Do
  len = st.Read(bytes, 0, 50000)
  mem.Write(bytes, 0, len)
Loop While len > 0
mem.Close()

它工作正常,但唯一的问题是最后一次读取总是在返回0之前阻塞20秒。 我假设这是某种超时。有没有办法缩短或消除它?

1 个答案:

答案 0 :(得分:0)

我无法在我的系统上重现该行为,当没有更多可用数据时,Read立即返回0。您确定没有在TcpClient上设置任何其他属性,例如cl.NoDelay = false

您可以在调用st.Read之前尝试检查cl.Available > 0,但这不应该是必要的。

您还应该处理从Read返回的-1的情况(当TCP流已关闭时)。否则mem.Write会抛出一个ArgumentOutOfRange异常。