2014-02-05 157 views
-1

挑戰:我們有許多分佈式前哨的客戶端,必須使用中央服務器進行管理。由於有些客戶位於DMZ或代理後面,他們應該連接到服務器!套接字設計:處理連接請求TCP/UDP

由於我一次只需處理一個客戶端,服務器不一定能夠同時處理多個客戶端,但是,我希望看到正在嘗試連接的客戶端列表到服務器。另外,如果客戶端在中央服務器感興趣的特定目錄中有一些文件,我希望看到有關客戶端的更多信息,而不僅僅是IP地址,例如地理位置和一些信息。我的問題是,如何我最好這樣做。

當然,我可以簡單地顯示每個客戶端試圖在列表框中連接,只接受我想要連接的客戶端,但是這真的是一種方式嗎?我懷疑我能獲得有關客戶端的更多信息,而不是IP地址?

我想知道,如果這需要UDP。客戶端發送UDP數據報,通知服務器他們還活着並且想要連接。在服務器上,我看到所有這些客戶端都列出了他們發送的數據。然後,我可以選擇一個客戶端,發送一個答案/「連接請求」與UDP,以便這個特定的客戶端將通過TCP連接到服務器?

這可能嗎?

+0

如果您有興趣避免重新發明輪子,我已經編寫了一個C++服務器和庫,它幾乎可以處理您想要做的一切;你可以看看這裏:https://public.msli.com/lcs/muscle/如果你對這種方法感興趣,給我發一封電子郵件或一封私信,我會告訴你如何設置一個演示您需要的功能(大約需要5分鐘)。 –

回答

1

這聽起來像使用錘子來打破堅果。只要讓他們都通過TCP連接。然後你得到他們的存在,他們的IP地址,他們關心的任何其他東西寄給你。一次處理它們。這並不難。

+0

謝謝,但現在的問題是,對於每個連接的客戶端(因爲它是非阻塞的),會創建一個單獨的線程。所以如果有100個客戶連接,我有100個線程,這真的很不幸,因爲我基本上只能一次一個地工作。 – user66875