2016-04-03 180 views
0

我是Java套接字編程新手,目前我正在開發一個允許多個客戶端相互聊天的小型點對點UDP聊天室應用程序。Java對等udp聊天室

我的問題是,如何讓客戶端發現所有其他連接的客戶端,一旦他點擊連接按鈕,只提供一個連接的客戶端IP和端口?該程序只能在本地網絡上運行。

+0

我試過使用一個列表並將它傳遞給每個新的客戶端。但它沒有工作。 – Omar

回答

1

可以使用UDP的一個獨特功能是​​

的IPv4(您可能正在使用)的地址廣播爲255.255.255.255。發送到該地址的任何數據報將被髮送到網絡上該端口的所有UDP客戶端。

你可以爲你的聊天應用程序做什麼,讓每個客戶端發送一個數據包給UDP廣播來標識自己,比如可能是用戶的暱稱。所有其他客戶端都會看到該數據包,並且您將能夠解析數據包並顯示網絡上所有聊天客戶端的列表。

這裏是發送一個數據廣播的例子:

DatagramSocket s = new DatagramSocket(); 
    s.setBroadcast(true); 
    DatagramPacket dp = new DatagramPacket("insert data here".getBytes(), "insert data here".length(), new InetSocketAddress("255.255.255.255", 5000)); 
    s.send(dp); 

另一個客戶端可以接收它像這樣:

DatagramSocket s = new DatagramSocket(); 
s.setBroadcast(true); 
DatagramPacket dp = new DatagramPacket(new byte[1024], 1024); 
s.receive(dp); 

接收到的DatagramPacket將包含IP和客戶端的端口誰已經播出了它。

+0

謝謝,我會試試這個。 – Omar

+0

@Omar如果您有任何問題,請告訴我。 – jython234

0

一個簡單的可能性是,每個客戶端存儲它所知道的其他對等方,並將該列表傳遞給任何新的客戶端連接。