首页 / C# / c# – 检测封闭的网络连接
c# – 检测封闭的网络连接
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 检测封闭的网络连接,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1715字,纯文字阅读大概需要3分钟。
内容图文
我写过一些通过TCP进行通信的小程序.由于一个程序已关闭其网络连接,而另一个端点以某种方式未能注意到它现在已断开连接,因此系统挂起的问题无穷无尽.
我期待在已经关闭的TCP连接上做I / O以抛出某种I / O异常,但是程序似乎只是挂起,等待另一个端点回复.显然,如果连接已关闭,则该回复永远不会到来. (如果你把它留下来,比如20分钟,它似乎没有超时.)
有什么方法可以强迫远程端“看到”我已关闭网络连接?
更新:这是一些代码……
public sealed class Client
{
public void Connect(IPAddress target)
{
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(ipAddress, 1177);
_stream = new NetworkStream(socket);
}
public void Disconnect()
{
_stream.Close();
}
}
public sealed class Server
{
public void Listen()
{
var listener = new TcpListener(IPAddress.Any, 1177);
listener.Start();
var socket = listener.AcceptSocket();
_stream = new NetworkStream(socket);
...
}
public void Disconnect()
{
socket.Shutdown(SocketShutdown.Both);
socket.Disconnect(false);
}
}
解决方法:
当应用程序以正确的方式关闭套接字时,它会发送包含0个字节的消息.在某些情况下,您可能会收到SocketException,表明出现了问题.在第三种情况下,远程方不再连接(例如通过拔出网络电缆)而没有双方之间的任何通信.
如果最后发生这种情况,您将不得不将数据写入套接字以检测您是否无法再访问远程方.这就是发明保持活动机制的原因 – 它们经常检查它们是否仍能与另一方通信.
查看您现在发布的代码:使用NetworkStream时,对它的读取操作将返回值0(字节)以指示客户端已关闭连接.
documentation是两个都提到的
“If no data is available for reading, the Read method returns 0.”
和
“If the remote host shuts down the connection, and all available data has been received, the Read method completes immediately and return zero bytes.”
在同一段中.实际上,如果在连接打开时没有可用于读取的数据,NetworkStream会阻止.
内容总结
以上是互联网集市为您收集整理的c# – 检测封闭的网络连接全部内容,希望文章能够帮你解决c# – 检测封闭的网络连接所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。