2014-03-06 227 views
2

我打算創建一個聊天消息應用程序,其中兩個或多個客戶端可以通信,但我有點困惑。JAVA套接字客戶端到客戶端通信

  1. java是否可以通過套接字與客戶端進行客戶端通信?
  2. 套接字通信是否需要服務器?
  3. 有可能一個客戶站在通信服務器上嗎?
  4. 您有任何客戶端與客戶端通信的教程嗎?
  5. 如果通信需要一個服務器,客戶端A可以看到客戶端B的消息?

回答

3

客戶端到客戶端通信不使任何意義,因爲一旦系統開始接收消息時,它被稱爲服務器,所以在溝通應該有一個服務器和客戶機到別的溝通的情況會是怎樣的兩個人說話,他們都沒有聽。

客戶端A可以充當服務器和客戶端,因此客戶端B, 兩者都可以通過兩種方式進行通信,即發送和接收信息。

+0

如果客戶端C /客戶端D進來,該怎麼辦?這個想法改變了嗎? –

+0

如果數字增加,同樣的事情將適用。 –

1

是的,Java可以使用套接字。 例如,「正式」的教程從Oracle:http://docs.oracle.com/javase/tutorial/networking/sockets/

但隨着插座工作直接需要大量的用於編碼/解碼消息的代碼從/到一個二進制形式,數據流爲邏輯「包」中分離,處理線程和消息隊列等等。幸運的是,有網絡庫使得這個過程變得更加簡單。我會推薦Netty:http://netty.io/

關於客戶端/服務器關係。如果我們正在談論TCP/IP,那麼是的。一方(服務器)總是監聽連接,另一方(客戶端)打開與服務器的連接。

但是,如果您使用UDP,則從網絡的角度來看,所有參與者都是平等的。他們只是發送和接收UDP數據包。

回到您的聊天應用程序:最簡單的解決方案 - 所有客戶端連接到專用服務器。每個聊天消息都包含客戶端ID。當服務器收到該消息時,它將其發送給具有指定標識的客戶端。因此,每個客戶都可以將消息傳遞給每個其他客戶。服務器作爲「調度員」工作。

+0

更能解釋UDP的概念嗎?我想創建一個不需要服務器的聊天應用程序。你有什麼教程/文件嗎? –

+0

這裏是UDP教程:http://docs.oracle.com/javase/tutorial/networking/datagrams/但是當談到「無服務器」環境時,你應該回答的第一個問題是(「你自己)應該如何讓客戶知道彼此」?他們如何發現有另一個客戶願意加入聊天? – Deinlandel

+0

我不確定是否會有數據庫將用戶連接到對方? –

0

如果您需要簡單的方法,您可以嘗試https://httprelay.io服務。你需要的僅僅是HTTP客戶端,而不需要外部庫。