2012-06-20 108 views
1

是否有可能檢查客戶端套接字此時是否保持連接處於活動狀態?我使用使用AsyncCallBack操作的多線程服務器。 有關於這個問題的很多類似的問題,我讀過關於Socket.Poll方法 - 一切工作不正常。確定異步服務器中的套接字連接狀態

嘗試着將這個示例:

bool IsConnectedAviable(Socket s) 
    { 
     try 
     { 
      if (s != null && s.Connected) 
      { 
       if (s.Poll(0, SelectMode.SelectRead)) 
       { 
        byte[] buff = new byte[1]; 
        if (s.Receive(buff, SocketFlags.Peek) == 0) 
        { 
         return false; 
        } 
        else 
        { 
         return true; 
        } 
       } 

       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
     catch 
     { 
      return false; 
     } 
    } 

提前感謝! :)

回答

2

如果從另一端收到的東西,你知道的連接仍然活着。如果您在一段時間內沒有收到任何來自另一端的任何信息,確定連接是否仍然存在的唯一方法是發送一些信息。

+0

好的。其實,這正是我想,但在我看來,有一個包裝或工具或東西,可以提供查詢,而不發送回聲的連接能力。現在,我意識到無法輕鬆檢查它。 –

0

我認爲你必須改變你對套接字的看法。簡化一下,他們有兩個狀態:「絕對斷開」和「也許斷開連接」。相應地編碼。在「可能已斷開連接」狀態下,您可以做的最好的嘗試是發送數據。如果您使用TCP,並且交付成功,則不會發生任何事情。如果沒有,你會得到一個例外 - 但是在TCP嘗試重試之後,只有

這是物理世界的必要之惡:你是在火車上可能剛進入隧道,如果該方法說:「是的,我連」這實際上是一個謊言。

+0

非常感謝澄清和相關的實例,它有助於理解它好多了! –