我是Java套接字編程新手,目前我正在開發一個允許多個客戶端相互聊天的小型點對點UDP聊天室應用程序。Java對等udp聊天室
我的問題是,如何讓客戶端發現所有其他連接的客戶端,一旦他點擊連接按鈕,只提供一個連接的客戶端IP和端口?該程序只能在本地網絡上運行。
我是Java套接字編程新手,目前我正在開發一個允許多個客戶端相互聊天的小型點對點UDP聊天室應用程序。Java對等udp聊天室
我的問題是,如何讓客戶端發現所有其他連接的客戶端,一旦他點擊連接按鈕,只提供一個連接的客戶端IP和端口?該程序只能在本地網絡上運行。
可以使用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和客戶端的端口誰已經播出了它。
一個簡單的可能性是,每個客戶端存儲它所知道的其他對等方,並將該列表傳遞給任何新的客戶端連接。
我試過使用一個列表並將它傳遞給每個新的客戶端。但它沒有工作。 – Omar