在VB.net中,我使用TcpClient来检索数据字符串.我一直在检查.Connected属性以验证客户端是否已连接,但即使客户端断开连接,它仍然返回true.我可以使用什么作为解决方法?
这是我当前代码的精简版:
Dim client as TcpClient = Nothing client = listener.AcceptTcpClient do while client.connected = true dim stream as networkStream = client.GetStream() dim bytes(1024) as byte dim numCharRead as integer = stream.Read(bytes,0,bytes.length) dim strRead as string = System.Text.Encoding.ASCII.GetString(bytes,0,i) loop
我想,如果客户端断开连接,至少GetStream()调用会抛出一个异常,但是我关闭了另一个应用程序但它仍然没有...
谢谢.
编辑 轮询客户端.建议使用但不能解决问题.如果客户端没有'acutally'连接可用,则返回0.
关键是我试图让连接保持打开状态,并允许我通过同一个套接字连接多次接收数据.
当NetworkStream.Read返回0时,则连接已关闭.参考:
如果没有可用于读取的数据,则NetworkStream.Read方法将阻塞,直到数据可用.为避免阻塞,您可以使用DataAvailable属性来确定数据是否在传入网络缓冲区中排队等待读取.如果DataAvailable返回true,则Read操作将立即完成.Read操作将读取尽可能多的数据,最多可达size参数指定的字节数.如果远程主机关闭连接,并且已收到所有可用数据,则Read方法将立即完成并返回零字节.