我正在用Java编写基于多播的消息传递程序。为了对消息进行流控制,我希望组中的每个成员维护该组中所有其他成员的列表。我可以通过为每个成员分配一个单独的ID来实现此目的,该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);
我想根据地址来区分它们。
唯一的问题是,我正在本地计算机上运行该程序的许多实例,因此它们都具有相同的地址。
因此,您不能仅根据地址来区分它们。
是否可以为每个发件人分配一个单独的端口?
是的,如果它们都使用不同的套接字。
接收器可以在所有端口上监听吗?
接收器不需要在其他端口上侦听。您只发送到一个端口,只需要在一个端口上接收。
如果发送方也是接收方,就会出现问题。如果真是这样,那将是行不通的:您将拥有大量的端口,并且您基本上将必须多播到所有已知的端口,而这实际上根本不是多播。在这种情况下,您将需要设计一个唯一的客户端ID,例如UUID。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句