2011-11-29 118 views
0

我目前正在爲一些網絡實踐開展分佈式網絡項目,並且想法是將文件從我的服務器發送到幾個不同的客戶端(分離文件之後),客戶端將找到一個字符串的頻率並將其返回。分佈式網絡多個客戶端

我遇到的問題是如何識別每個客戶端並向每個客戶端發送數據。 我一直致力於通過他們的端口識別每個客戶端的解決方案。問題出現在我如何處理多個連接和端口。我知道我必須使用send()在打開連接等時將數據發送到端口,但我不知道如何跨多個連接執行此操作(我可以使用單個客戶端和服務器執行此操作,但不能與多個客戶)

有沒有人有任何建議從高層次的立場?我從一個朋友,誰說一個建議:

  1. 打開插座
  2. 監聽連接
  3. 當接收到一個連接請求,產生一個新的線程來處理連接。 主進程將返回到步驟2來偵聽新連接,而新線程 將處理與關聯客戶端的所有數據流。

但我真的不知道我理解這個......我也一直在引用http://shoe.bocks.com/net/#socket

感謝

+0

我肯定會建議你不要重新發明遺囑,並看看分佈式編程的開放mpi。 http://www.open-mpi.org/ – Oz123

回答

2

你的朋友是正確的。按照前三個步驟(他提到),然後你需要:

產卵線程後,發送數據(從文件讀取)到新的套接字。

一旦完整的文件,你應該斷開連接並退出線程。在客戶端,您應該處理斷開連接並可能退出。

注:

此外,您還可以,如果你想使用的sendfile(),而不是發送()。如果你希望處理所有連接而不產生線程,你可以使用select()。

詳情請參閱http://beej.us/guide/bgnet/

編輯:

如何識別每個客戶? Ans:這是傳統的端口發現問題,但在你的情況下它很簡單。服務器應該在衆所周知的端口上進行監聽(比如說12345),並且所有的客戶端都將連接到它。一旦連接,服務器就擁有所有的sockfds。您需要使用這些sockfds發送數據並識別它們。

0

如果您查看networkComms.net,一個開源網絡通信庫,一旦您創建了與客戶端的連接,您就可以通過查看NetworkIdentifier標籤(每個客戶端唯一的GUID)來跟蹤該特定客戶端。

如果您要將大文件發送給您的所有客戶端,請查看包含專爲此目的而設計的DistributedFileSystem。