当前位置:  开发笔记 > 编程语言 > 正文

TcpClient.Connected返回true但客户端未连接,我可以使用什么?

如何解决《TcpClient.Connected返回true但客户端未连接,我可以使用什么?》经验,为你挑选了1个好方法。

在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.

关键是我试图让连接保持打开状态,并允许我通过同一个套接字连接多次接收数据.



1> Mark Bracket..:

当NetworkStream.Read返回0时,则连接已关闭.参考:

如果没有可用于读取的数据,则NetworkStream.Read方法将阻塞,直到数据可用.为避免阻塞,您可以使用DataAvailable属性来确定数据是否在传入网络缓冲区中排队等待读取.如果DataAvailable返回true,则Read操作将立即完成.Read操作将读取尽可能多的数据,最多可达size参数指定的字节数.如果远程主机关闭连接,并且已收到所有可用数据,则Read方法将立即完成并返回零字节.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有