================================================================
MSDN上说:Socket如果远程主机处于关机状态或关闭了连接,则 Available 将引发 SocketException。
我采用如下代码检测,对方程序都关闭了,也没有发生异常。为什么?在Timer组件中检测(Socket tcp)
label3.Text=tcp.Available.ToString();
始终没有异常发生
======================================================
MSDN上说:如果远程主机关机或关闭连接,则 DataAvailable 将引发 SocketException。TcpClient+NetWorkSteam(NetworkSteam ns)
用ns.DataAvailable 也检测不到任何异常。即便是对方连接的程序都关闭了。
============================================================
大家检测网络断开有什么好的办法?
MSDN上说:Socket如果远程主机处于关机状态或关闭了连接,则 Available 将引发 SocketException。
我采用如下代码检测,对方程序都关闭了,也没有发生异常。为什么?在Timer组件中检测(Socket tcp)
label3.Text=tcp.Available.ToString();
始终没有异常发生
======================================================
MSDN上说:如果远程主机关机或关闭连接,则 DataAvailable 将引发 SocketException。TcpClient+NetWorkSteam(NetworkSteam ns)
用ns.DataAvailable 也检测不到任何异常。即便是对方连接的程序都关闭了。
============================================================
大家检测网络断开有什么好的办法?
解决方案 »
- C#中网络通信
- 还是菜鸟问题~~ 锯齿型数
- 本人新手,麻烦各位帮看下这段程序哪有问题?
- ******************UDP在WinForm程序下可以,为什么在PocketPc下不行**********************
- 在.NET里有没有想Html里的Selected标签一样的控件?
- 问个非常有难度的问题,关于datatable和字节数组之间的相互转换!!!!!!!!!!
- 如果在一个windows form里面实现HTML编辑功能
- Array 是如何实现转换为泛型如 IList<string>
- 位图合并消耗较大内存,如何优化?
- C#中有没有界面控件的? 好不好学啊?
- 请问该如何制作cs的安装部署?
- 请高手帮忙,关于实现如VS.Net中数据适配器配置向导中的查询分析器问题。
感谢 fancyf(凡瑞) 的回答,不过,还是没有解决问题啊.希望大家踊跃发言...
举例说明
[C#]
// This derived class demonstrates the use of three protected methods belonging to the TcpClient class
public class MyTcpClientDerivedClass : TcpClient
{// Constructor for the derived class.
public MyTcpClientDerivedClass() : base()
{
}
public void UsingProtectedMethods()
{ // Uses the protected 'Active' property belonging to the TcpClient base class
// to determine if a connection is established.
if (this.Active){
// Calls the protected 'Client' property belonging to the TcpClient base class.
Socket s = this.Client;
// Uses the Socket returned by Client to set an option that is not available using TcpClient.
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
}
// To free all resources, calls the protected virtual method Dispose belonging to the TcpClient base class.
this.Dispose(true);
GC.SuppressFinalize(this);}}
一定要用socket的connected
可是:
TcpClient 的派生类可使用此属性(active)来确定连接尝试是否已成功。此属性不监视 TcpClient 连接的当前状态。如果远程主机关闭连接,将不更新 Active。
可使用 Connected 属性来获取 Socket 的连接状态。此属性将返回 Socket 的最新已知状态。当它返回 false 时,表明 Socket 要么从未连接,要么已断开连接。即使 Connected 返回 true,也无法保证 Socket 仍处于 Connected 状态。true 值仅意味着在上次 I/O 操作时 Socket 处于连接状态。================================================================================
我希望当我的客户端关闭后,我的服务器端能马上知道。并且不能指望客户端在关闭前给发关闭指令。
tcpListener = New TcpListener(IPAddress.Any, txtListenPort.Text)
tcpListener.Start() thrListen = New Threading.Thread(AddressOf ListenService)
thrServer = New Threading.Thread(AddressOf ReceiveService)
thrListen.Start()
thrServer.Start() txtOutput.Text = "Server start ..."
End Sub
Private Sub ReceiveService()
Dim netStream As NetworkStream
Dim intRead As Integer While True
If Not socServer Is Nothing Then
Do
Try
Dim bytData(1024) As Byte
'这里无论socket是否Blocking,当客户端连接关闭时都不知道,也无异常
intRead = socket.Receive(bytData, bytData.Length, SocketFlags.None)
txtOutput.Text = txtOutput.Text & ControlChars.CrLf & codEncoding.GetString(bytData)
Catch es As SocketException
Exit Do
End Try
Loop While intRead > 0
End If
System.Threading.Thread.Sleep(200)
End While
End Sub