在 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() 调用会抛出异常,但我已经关闭了另一个应用程序,但它仍然没有...
Thanks.
EDIT建议轮询 Client.Available 但这并不能解决问题。如果客户端未“实际”连接,则可用仅返回 0。
关键是我试图允许连接保持打开状态,并允许我通过同一套接字连接多次接收数据。
当 NetworkStream.Read 返回 0 时,表示连接已关闭。参考:
如果没有数据可供读取,则 NetworkStream.Read 方法将阻塞,直到有数据可用为止。为了避免阻塞,您可以使用 DataAvailable 属性来确定数据是否在传入网络缓冲区中排队等待读取。如果 DataAvailable 返回 true,则读取操作将立即完成。读取操作将读取尽可能多的可用数据,最多可达大小参数指定的字节数。如果远程主机关闭连接,并且已接收到所有可用数据,则 Read 方法将立即完成并返回零字节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)