我是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