Java点对点udp聊天室
Java peer to peer udp chatting room
我是 Java 套接字编程的新手,我目前正在开发一个小型点对点 UDP 聊天室应用程序,它允许多个客户端相互聊天。
我的问题是,如何让客户端在点击连接按钮后发现所有其他连接的客户端,只提供一个连接的客户端 ip 和端口?该程序仅在本地网络上运行。
一个简单的可能性是每个客户端都存储它知道的其他对等点并将该列表传递给任何连接的新客户端。
您可以使用 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 和端口。
不要忘记对您的同行进行身份验证。您可以尝试使用 OpenSSL(非常简单)生成一些证书并将其与 ssl 关联使用。
编辑:一个机器人告诉我更具体所以这里是:
本地网络(LAN)并不总是安全的,所以,可以肯定的是,我建议您使用OpenSSL生成证书进行身份验证和私钥进行加密,这样您就可以安全地进行通信。
Python ssl 模块就是一个很好的例子。
我是 Java 套接字编程的新手,我目前正在开发一个小型点对点 UDP 聊天室应用程序,它允许多个客户端相互聊天。
我的问题是,如何让客户端在点击连接按钮后发现所有其他连接的客户端,只提供一个连接的客户端 ip 和端口?该程序仅在本地网络上运行。
一个简单的可能性是每个客户端都存储它知道的其他对等点并将该列表传递给任何连接的新客户端。
您可以使用 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 和端口。
不要忘记对您的同行进行身份验证。您可以尝试使用 OpenSSL(非常简单)生成一些证书并将其与 ssl 关联使用。
编辑:一个机器人告诉我更具体所以这里是:
本地网络(LAN)并不总是安全的,所以,可以肯定的是,我建议您使用OpenSSL生成证书进行身份验证和私钥进行加密,这样您就可以安全地进行通信。 Python ssl 模块就是一个很好的例子。