我是Java套接字编程的新手,我正在开发一个小型的点对点UDP聊天室应用程序,允许多个客户端相互聊天。
我的问题是,一旦客户端点击连接按钮,如何只提供其中一个连接的客户端ip和端口,我该如何让客户端发现所有其他连接的客户端?该程序仅在本地网络上运行。
答案 0 :(得分:1)
您可以使用UDP的唯一功能broadcasting
在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和端口。
答案 1 :(得分:0)
一个简单的可能性是每个客户端都存储它知道的其他对等端,并将列表传递给任何连接的新客户端。