2011-04-04 101 views
1

在客戶端服務器應用程序中,客戶端連接到服務器,現在如果客戶端斷開連接,那麼我希望它必須在服務器上觸發事件,告知它已斷開連接。我可以使用計時器或一些循環和一個不同的線程來實現這一點。該線程不斷檢查客戶端的連接。這就對了。但它就像投票機制。我想寫一些中斷機制。我的意思是我不想使用計時器或循環。當客戶端意願或不願意從客戶端或服務器端斷開連接時,我的服務器應通知客戶端斷開連接。請不要告訴如何製作自定義事件。如何跟蹤客戶端已斷開連接?

(我也問過同樣的問題,幾分鐘前,但無法找到正確的響應和問題是由論壇關閉...)

+1

這裏有很多優秀的女士/女孩,最好不要將他們排除在回答之外:) – 2011-04-04 10:07:08

+0

哎呀也 - 你沒有標記你的問題,指定你正在使用的技術。 C#/ Java/ASP.NET /套接字/遠程處理/網絡?試着問*特定的問題,並且包括你已經嘗試過的和出了什麼問題。 – 2011-04-04 10:08:21

+0

你在哪個班級處理連接? – 2011-04-04 10:12:57

回答

1

目前尚不清楚是否你在談論ASP.NET(或其他網站的東西),使用套接字進行直接通信,遠程處理,WCF或其他。請澄清你是否可以。

看來你在談論輪詢與事件驅動系統。確切的實施和細節取決於上述問題。 「請不要告訴如何製作自定義事件」沒有多大意義:您似乎不想輪詢,並且根據情況,您可能必須創建自定義事件。


更新給你與插座工作的事實:

沒有被觸發的事件,與插座那根本是讀,寫等通話將失敗,SocketException

請參閱這裏瞭解更多信息:

Instantly detect client disconnection from server socket

您可以爲此創建您自己的情況下,如果你的插座在另一個線程例如處理,你的線程方法可能看起來是這樣的:

bool running = true; 
while (running) 
{ 
    try 
    { 
     // do socket work here - read/write/etc 
    } 
    catch (SocketException) 
    { 
     // something happened, e.g. client disconnected. stop thread running. 
     // you could fire your 'Disconnected' event here. 
     running = false; 
    } 
} 

基本上,當客戶端斷開的socket方法,將拋出SocketException,你可以檢查原因異常對象的SocketError財產。這將是其中之一:

http://msdn.microsoft.com/en-us/library/system.net.sockets.socketerror.aspx

這些結果表明已斷開的客戶端:ConnectionReset,NotConnected ......但你幾乎必須註銷整個插座,如果你得到任何SocketException

+0

使用套接字。其實我不想讓服務器忙於執行定時器或循環來跟蹤客戶端連接。所以需要一些只有在客戶端斷開時才執行的東西。例如:在你的房子裏,你不會一次又一次地檢查你的門是否有人在場。當任何人在那裏都很簡單,他/她必須敲門,然後才必須打開門。同樣,如果有人從你家離開,他/她會通知你我要離開。這是不公平的,一次又一次地看着你的家人在房間裏的存在。 – himanshu 2011-04-04 10:28:10

+0

這就是我需要的。 – himanshu 2011-04-04 10:28:52

+0

不幸的是,沒有'斷線'事件,請看我的答案。 – 2011-04-04 10:36:14

相關問題