- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用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/
我是一名优秀的程序员,十分优秀!