gpt4 book ai didi

java - 确定具有相同IP的组播发送者

转载 作者:行者123 更新时间:2023-11-30 04:07:26 25 4
gpt4 key购买 nike

我正在用java编写一个基于多播的消息传递程序。为了控制消息的流量,我希望组中的每个成员都维护组中所有其他成员的列表。我可以通过为每个成员分配一个与数据一起发送的单独 ID 来实现此目的,但我想根据地址来区分它们。

唯一的问题是,我正在本地计算机上运行该程序的许多实例,因此它们都具有相同的地址。该组的每个成员在单独的线程中运行一个监听器,该线程监听指定多播 IP 的某个端口上的消息,并且每个发送者都会向该端口发送消息。是否可以为每个发送者分配一个单独的端口?接收器能够监听所有端口吗?

接收器使用以下方式绑定(bind)到端口:

address = InetAddress.getByName(multicastIP);
socket = new MulticastSocket(this.port);
socket.joinGroup(address);

消息使用以下方式发送:

packet = new DatagramPacket(data, data.length, address, port);
socket.send(packet);

最佳答案

I'd like to differentiate them based on address.

The only problem is, I am running many instances of the program from my local machine, so they all have the same address.

因此您不能仅根据地址来区分它们。

Would it be possible to assign a separate port for each sender?

是的,如果它们都使用不同的套接字。

Would the receiver be able to listen on all ports?

接收器不需要监听不同的端口。您只需发送到一个端口,您只需在一个端口上接收。

如果发送者同时也是接收者,就会出现问题。如果是这种情况,它将无法工作:您将遇到端口爆炸,并且您基本上必须向所有已知端口进行多播,这实际上根本不是多播。在这种情况下,您需要设计一个唯一的客户端 ID,例如 UUID。

关于java - 确定具有相同IP的组播发送者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20406927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com