Java点对点udp聊天室

时间:2016-04-03 18:15:16

标签: java sockets udp p2p

我是Java套接字编程的新手,我正在开发一个小型的点对点UDP聊天室应用程序,允许多个客户端相互聊天。

我的问题是,一旦客户端点击连接按钮,如何只提供其中一个连接的客户端ip和端口,我该如何让客户端发现所有其他连接的客户端?该程序仅在本地网络上运行。

2 个答案:

答案 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)

一个简单的可能性是每个客户端都存储它知道的其他对等端,并将列表传递给任何连接的新客户端。