我在同一臺機器上有一個服務器和客戶端程序。服務器是應用程序的一部分 - 可以任意啓動和停止。當服務器啓動時,我希望客戶端連接到服務器的偵聽套接字。有win32函數來等待文件系統更改(ReadDirectoryChangesW)和註冊表更改(RegNotifyChangeKeyValue) - 是否有任何類似的網絡更改?我寧願不讓客戶不斷地投票。有沒有辦法在win32上等待監聽套接字?
0
A
回答
1
沒有這樣的Win32 API,但是這可以通過使用事件輕鬆完成。客戶將等待該事件發出信號。服務器在啓動時會發出事件信號。
您需要使用的相關API是CreateEvent,OpenEvent,SetEvent,ResetEvent和WaitForSingleObject。
如果您的服務器將作爲服務運行,那麼對於Vista和它將運行在會話0隔離。這意味着您需要使用名稱前綴爲「Global \」的事件。
,有可能是有一個很好的理由需要這一點,但你實現在此之前請考慮:
- 是有一些原因,你需要一個連接,對嗎?我認爲這不是問題,因爲如果您在客戶端執行某個操作,那麼您可以在此創建一個新的服務器連接。
- 服務器是否比客戶端更頻繁地啓動和停止?你可以切換誰聽/連接
0
考慮使用某種形式的Windows同步,例如信號量。客戶端可以等待同步原語,服務器可以在啓動時發出信號。
0
個人我會使用從服務器的UDP廣播,並有「客戶端」聽它。服務器可以在運行時每X週期廣播一個UDP數據包,當客戶端獲得一個時,如果它尚未連接,它可以連接。
這樣做的好處是,您可以將客戶端移動到不同的機器上,而不會有任何問題(並且由於從客戶端到服務器的主要連接已經是套接字,因此將客戶端和服務器綁定到同一臺計算機因爲您爲初始引導選擇了本地IPC方法)。
相關問題
- 1. Casperjs - 有沒有辦法等待n秒?
- 2. 在C#中沒有辦法等待嗎?
- 3. Python套接字監聽所有端口
- 4. 監聽套接字
- 5. 在沒有套接字監聽的情況下創建UDP客戶套接字
- 6. 套接字監聽器(在Linux上)
- 7. 是否有可能在異步套接字上等待連接
- 8. 有沒有辦法監聽另一個類的方法執行?
- 9. UDP套接字監聽
- 10. 有沒有辦法監聽完成MovieClip播放?
- 11. 有沒有辦法刪除用ajaxSuccess創建的監聽器?
- 12. 有沒有辦法監聽flash.display.DisplayObjectContainer numChildren屬性中的更改?
- 13. 有沒有辦法確定如何套接字連接?
- 14. 有沒有辦法等待呈現所有角2組件?
- 15. C:套接字沒有停止和等待
- 16. 有沒有辦法在javascript中獲取所有事件監聽器綁定?
- 17. udp監聽器正在等待數據
- 18. 在fork()後關閉監聽套接字()
- 19. 有沒有辦法通知用戶等待WebView加載圖像
- 20. 有沒有辦法等待佐賀的結果或例外?
- 21. 等待(0.5)有沒有辦法? --fflush()阻止stdin?
- 22. 有沒有辦法在Android中自動接聽來電?
- 23. 有沒有辦法處理Perl 6中的Unix套接字?
- 24. 有沒有辦法同步檢查套接字可用數據?
- 25. 有沒有辦法關閉Unix套接字只讀或寫?
- 26. 有沒有辦法讓Excel VBA發送數據到套接字?
- 27. 如何讓Win32線程在工作隊列和套接字上等待?
- 28. 套接字監聽和連接
- 29. 有沒有辦法傾聽Animatable.isRunning更改?
- 30. 有沒有辦法在Windows上收聽信號
它是一種日誌查看器,所以理想情況下它會盡快運行。我的願望不是立即聯繫,也不必擔心多久進行一次民意調查。 – arolson101 2009-12-11 05:11:21