2009-12-10 144 views
0

我在同一臺機器上有一個服務器和客戶端程序。服務器是應用程序的一部分 - 可以任意啓動和停止。當服務器啓動時,我希望客戶端連接到服務器的偵聽套接字。有win32函數來等待文件系統更改(ReadDirectoryChangesW)和註冊表更改(RegNotifyChangeKeyValue) - 是否有任何類似的網絡更改?我寧願不讓客戶不斷地投票。有沒有辦法在win32上等待監聽套接字?

回答

1

沒有這樣的Win32 API,但是這可以通過使用事件輕鬆完成。客戶將等待該事件發出信號。服務器在啓動時會發出事件信號。

您需要使用的相關API是CreateEvent,OpenEvent,SetEvent,ResetEventWaitForSingleObject

如果您的服務器將作爲服務運行,那麼對於Vista和它將運行在會話0隔離。這意味着您需要使用名稱前綴爲「Global \」的事件。

,有可能是有一個很好的理由需要這一點,但你實現在此之前請考慮:

  • 是有一些原因,你需要一個連接,對嗎?我認爲這不是問題,因爲如果您在客戶端執行某個操作,那麼您可以在此創建一個新的服務器連接。
  • 服務器是否比客戶端更頻繁地啓動和停止?你可以切換誰聽/連接
+0

它是一種日誌查看器,所以理想情況下它會盡快運行。我的願望不是立即聯繫,也不必擔心多久進行一次民意調查。 – arolson101 2009-12-11 05:11:21

0

考慮使用某種形式的Windows同步,例如信號量。客戶端可以等待同步原語,服務器可以在啓動時發出信號。

0

個人我會使用從服務器的UDP廣播,並有「客戶端」聽它。服務器可以在運行時每X週期廣播一個UDP數據包,當客戶端獲得一個時,如果它尚未連接,它可以連接。

這樣做的好處是,您可以將客戶端移動到不同的機器上,而不會有任何問題(並且由於從客戶端到服務器的主要連接已經是套接字,因此將客戶端和服務器綁定到同一臺計算機因爲您爲初始引導選擇了本地IPC方法)。

相關問題