2016-04-03 108 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

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