2012-05-29 47 views
3

我正在嘗試使用Synapse(TTCPBlockSocket)而不是Indy,但通過官方幫助和演示,我無法理解如何獲取TCP客戶端的數量,並且我沒有找到關於Synapse的連接/斷開連接事件,請給我一些提示或示例代碼。 在此先感謝!如何獲取Synapse中的客戶端數量和連接/斷開事件?

+2

在服務器端,您接受的每個連接應使用['HR_Accept']觸發['OnStatus'](http://synapse.ararat.cz/doc/help/blcksock.TBlockSocket.html#OnStatus)事件] (http://synapse.ararat.cz/doc/help/blcksock.html#THookSocketReason)原因。然而,對於斷開連接或當前客戶端計數,我無法找到任何屬性或事件,因爲每個客戶端都應該作爲單獨的線程運行。 – TLama

+2

要檢測客戶端斷開連接,數據交換協議應提供「再見!」,「退出」或「斷開連接」消息。如果協議允許,服務器還可以向客戶端發送心跳消息。 – mjn

+0

不是直接的答案,但您可以嘗試使用很多示例的ICS(TWSocket和TWSocketServer),主要是TCPServer之一,您可以在其中看到連接的客戶端的數量以及新客戶端連接時的信息。 – philnext

回答

2

正如TLama在評論中指出的那樣,每個傳入連接都會通過HR_Accept觸發OnStatus事件。如果我查看TBlockSocket源,則每個斷開連接(無論是通過協議還是錯誤)都應該在連接套接字上觸發一個OnStatus事件,其原因爲HR_SocketClose

+0

說實話,在使用Indy和Synapse後,我一直沒有使用突觸,我已經在阻塞模式和我自己的線程管理下切換回Delphi自己的TTcpClient/TTcpServer,請參閱這裏的示例: http://xxm.svn.sf.net/viewvc/xxm/trunk/Delphi/http/xxmHttpMain.pas –

+0

+1,帶'HR_Accept'的'OnStatus'事件只有當你接受傳入的連接時纔會得到。但是你仍然可以拒絕它。因此,如果您需要收到有關傳入連接的通知,您將在偵聽套接字線程上下文中獲得它。 – TLama

相關問題