C#TCP套接字编程 - 确定连接是否已被删除

时间:2010-10-14 13:58:13

标签: c# .net sockets tcp

我试图发现在给定的时间间隔之后是否在服务器上删除了TCP连接,并编写了以下代码;

 var tcpClient = new TcpClient();

 tcpClient.Client.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.KeepAlive, true);

 tcpClient.Connect(Ip, Port);
 var status = tcpClient.Connected ? "Connected" : "Failed to Connect";

 if (connected)
 {
    Console.WriteLn(string.Format("Connected - Waiting for '{0}' to see if the connection is dropped", ConnectionDuration));
    Thread.Sleep(ConnectionDuration);
    status = tcpClient.Connected ? "Stayed Connected" : "Connection Dropped";
 }

 Console.WriteLn(string.Format("Connection Status: '{0}'", status);

使用此代码,如果最初建立连接,我将始终收到“保持连接”状态消息。

因为服务器在我们公司之外,所以不希望将数据写入套接字,是否有其他方法可以确定连接是否已被删除?

由于

2 个答案:

答案 0 :(得分:1)

进行非阻塞零字节发送呼叫,如果您收到WOULDBLOCK错误代码或成功,则表示您仍然处于连接状态。

答案 1 :(得分:0)

我认为这不符合您的要求:

如果客户端套接字从最近的操作开始连接到远程资源,则为true;否则为false。否则,错误。

MSDN

另外,设置keepalive选项会在tcp级别发送数据,而不是你发送数据而是os。

我认为你必须围绕select

建立一些东西

HTH

马里奥