2010-10-14 80 views
1

我試圖發現一個給定的時間間隔後TCP服務器是否在服務器上被丟棄,並寫下如下代碼;C#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); 

使用此代碼,如果最初建立連接,我將始終收到「已連接」狀態消息。

由於服務器位於我們公司之外,因此不希望將數據寫入套接字,是否有任何其他方式來確定連接是否已被丟棄?

感謝

回答

1

請無阻塞零字節發送調用,如果你得到一個WOULDBLOCK錯誤代碼或成功,您仍然連接。

+1

你是相當正確的,我會試試這個,然後標記,如果它的工作原理是接受 - HTTP://計算器.COM /問題/ 1363682 /怎麼辦-I-使-A-無阻塞,插座通話中C到確定連接狀態 – CityView 2010-10-14 14:11:34

0

我不認爲這你想要做什麼:

true,如果客戶端套接字連接到遠程資源的最近操作;否則,是錯誤的。

MSDN

而且,設置keepalive選項將派上的TCP級別的數據,它只是沒有在發送數據,但操作系統。

我認爲你將不得不圍繞打造select

心連心東西

馬里奧