我正在用java编写基于多播的消息传递程序。对于消息的流控制,我希望该组的每个成员维护该组中所有其他成员的列表。我可以通过为每个成员分配一个与数据一起发送的单独ID来做到这一点,但我想根据地址区分它们。
唯一的问题是,我从本地计算机上运行了很多程序实例,所以它们都有相同的地址。该组的每个成员在一个单独的线程中运行一个侦听器,该线程侦听指定多播IP的某个端口上的消息,并且每个发送方都发送到该端口。是否可以为每个发件人分配一个单独的端口?接收器是否能够监听所有端口?
接收器使用以下命令绑定到端口:
address = InetAddress.getByName(multicastIP);
socket = new MulticastSocket(this.port);
socket.joinGroup(address);
使用以下方式发送消息:
packet = new DatagramPacket(data, data.length, address, port);
socket.send(packet);
答案 0 :(得分:2)
我想根据地址区分它们。
唯一的问题是,我从本地计算机上运行了很多程序实例,所以它们都有相同的地址。
因此,您无法仅根据地址区分它们。
是否可以为每个发件人分配一个单独的端口?
是的,如果他们都使用不同的套接字。
接收方能否收听所有端口?
接收器不需要侦听不同的端口。您只需发送到一个端口,您只需要在一个端口上接收。
如果发件人也是接收者,问题就出现了。如果是这种情况它将无法工作:你将有大量的端口,你将基本上必须多播到所有已知的端口,这实际上不是多播。在这种情况下,您需要设计一个唯一的客户端ID,例如UUID。