我正在使用Embarcadero RAD studio C++ builder XE創建一個C++應用程序。該應用程序在阻塞模式下使用動態創建的TServerSocket
組件。我創建了一個衍生自TServerClientThread
的類,它提供了一個自定義的ClientExecute()
方法。這個類是通過我已經實現的TServerSocket
事件處理程序OnGetThread
創建的。我分配了事件處理程序OnAccept
,OnClientConnect
,OnClientDisconnect
和OnClientError
。在我的線程類中,我使用TWinSocketStream
類從套接字連接讀取和寫入。爲什麼OnClientConnect和OnClientError事件不能在阻塞模式下觸發TServerSocket
我使用自定義書寫類(從TComponent
派生)創建TServerSocket
,我分配的事件處理程序是此類的成員函數。
我OnAccept
和OnClientDisconnect
事件觸發,但無論是OnClientConnect
和OnClientError
事件觸發有史以來。這個組件的正常行爲是什麼?我讀過的關於這個組件的所有信息都表明,所有事件都會在阻塞模式下觸發TServerSocket
,我簡直不明白爲什麼這些事件不會觸發。還有什麼我需要做的或這些事件只是不能在阻塞模式下工作?是否有可能使用TServerSocket
實例作爲另一個TComponent
派生類的成員造成某些問題?
感謝您的回答。我有一個OnClientConnect處理程序分配,但我沒有寫一個'OnGetSocket'處理程序,因爲我明白它不是必需的。我有一個'OnGetThread'處理程序,但沒有'OnGetSocket'處理程序可能的原因,我的事件不會觸發? – mathematician1975
'OnGetSocket'是可選的,對OnClientConnect被調用或不調用都沒有影響。如果您有一個分配給'OnClientConnect'的處理程序,那麼它應該被調用,除非2010/XE中的'TServerSocket'有一個不在其他版本中的錯誤。我從來沒有任何問題,正確調用「OnClientConnect」。我建議你在你的Project Options中啓用調試庫,這樣你就可以進入TServerSocket在'ScktComp.pas'的源代碼,並找出爲什麼'TServerClientWinSocket.Create()'在被TServerWinSocket.GetClientSocket()調用時不會調用'OnClientConnect'。 '。 –
我會嘗試你的建議。感謝您的幫助。 – mathematician1975