2012-02-05 71 views
1

最近我用java開發了一個簡單的使用套接字的java應用程序。它工作正常。但是現在我想創建一個可以通過IPMSG等局域網進行通信的應用程序。功能將是需要說明局域網應用的概念

  1. 消息發送。
  2. 文件發送。
  3. 語音聊天。
  4. 羣聊。
  5. 按需加密/解密。

這些是要包括的基本特徵。

現在我面對過這裏的混亂是

  • 的應用是對等的應用程序,其中一個用戶可以做任何事情,還有什麼其他的用戶可以做一個同行。
  • 沒有中央服務器,沒有客戶端。每個節點都充當服務器和客戶端。

所以應用程序必須是對等的。但是,當我GOOGLE了它,然後我得到像客戶端服務器只樣品,當我和我的同事談這件事時,他們也建議我的客戶端 - 服務器模型,但沒有理由爲什麼客戶端服務器,爲什麼不對等。在這種情況下,我是對的嗎?任何人都可以請在這種情況下指導我,因爲一旦我開始這些概念的任何一個發展我不能恢復由於時間短缺。您的建議是最受歡迎的。

回答

0

我最終使用修改爲支持P2P網絡的客戶端服務器模型。當一個節點進入網絡時,它會廣播它的存在,而其他節點不斷監聽新節點。每個節點將擁有自己的網絡連接節點列表。如果新節點進入網絡,他們將更新他們自己的列表。除了文件傳輸外,我對所有大部分操作都使用UDP,因爲它需要在TCP中。

0

我認爲建議服務器 - 客戶端關係的主要原因是爲了讓日誌更容易記錄,或爲每個人製作一個大型聊天室(如IRC)。如果需要登錄,服務器也會驗證登錄信息。因此,如果沒有服務器,釣魚攻擊將變得更加難以處理。

雖然我不明白爲什麼P2P聊天不起作用。如果我記得沒錯,Skype就是這麼做的。我總是喜歡分散。祝你的項目好運。 :)

+0

沒有登錄設施。該應用程序只顯示局域網中的人員,他們可以在他們想要通信的媒體中相互通信。 – ankurtr 2012-02-05 19:03:22

+0

@ ankur.trapasiya對不起,忘了標題的那部分。那麼因爲它是本地的,我真的不覺得有什麼問題。 – 2012-02-05 19:05:42

+0

@ ankur.trapasiya:就是這一點。如果你沒有專門的服務器,每個客戶都可以登錄,你必須開發另一種分散的方法來管理誰在線,誰不在。在局域網中,例如廣播信標包是一種可能的解決方案。 – buc 2012-02-05 19:08:05

0

你可能想看看使用它像Avahi(Linux的FOSS)或Bonjour(蘋果&的Windows開源而不是GPL)的Zeroconf標準和套餐。 Zeroconf允許在沒有用戶交互或中央配置服務器的情況下配置和檢測網絡服務。

+0

值得一提的是,iChat使用Bonjour爲他們的iChat客戶端進行局域網檢測。 – 2012-02-05 19:29:56

+0

好吧,我正在嘗試爲所有的操作系​​統和java開發應用程序。我的問題依然存在。哪個是適合的服務器 - 客戶機或對等機型... :-) – ankurtr 2012-02-05 19:59:08

+0

對不起,我不是很具體。 iChat使用Zeroconf(由Bonjour使用)進行局域網聊天,無需中央服務器。因此,如果您在與另一臺計算機相同的局域網上運行iChat,它會檢測到該計算機正在運行的聊天服務並自動連接到該聊天服務,從而允許您在沒有中央服務器的情況下進行聊天。 – 2012-02-05 20:08:10