Java:如何使多播IP地址成为独占的?

Java:如何使多播IP地址成为独占的?,java,networking,broadcast,multicast,Java,Networking,Broadcast,Multicast,我正在尝试使多播IP成为独占的,即它可以被“锁定”,当它被“锁定”时,没有更多的多播套接字可以加入它 可能吗?我该怎么做?下面是一些代码来解释我的案例: String multicastIP = "224.0.0.1"; //multicast IP to "lock" later InetAddress group = InetAddress.getByName(multicastIP); //create group MulticastSocket multicastSocket = ne

我正在尝试使多播IP成为独占的,即它可以被“锁定”,当它被“锁定”时,没有更多的多播套接字可以加入它

可能吗?我该怎么做?下面是一些代码来解释我的案例:

String multicastIP = "224.0.0.1"; //multicast IP to "lock" later
InetAddress group = InetAddress.getByName(multicastIP); //create group

MulticastSocket multicastSocket = new MulticastSocket(8800); //Create a MulticastSocket using port 8800
multicastSocket.joinGroup(group); //join the group

//This is the part where I want to "lock" the group/IP
其他信息:

我正在开发一个网络游戏,其中单服务器到多个客户端的广播方案是通过这种方法实现的

曾经有一段时间,我们创建了两个服务器(恰好具有相同的多播IP),顺便说一句,客户端侦听两个服务器,从两个服务器接收消息

我们要做的是让客户端只监听各自的服务器


谢谢D

多播无法为您做到这一点

您必须检查每个传入的数据包,并将其与客户端从中发送的
(源地址、源端口)
元组进行匹配

老实说,我不认为使用muticast有什么好处。我见过的一种方法是使用多播进行服务发现,然后在发现“真正的”协议后使用单播进行服务发现


编辑:对于LAN应用程序,可以接受多播。我只会小心不要播出太多。(多播基本上是对大多数交换机的广播;它们由NIC而不是网络过滤掉)也就是说,理想情况下,确保服务器是发送多播流量的服务器,而客户端则向服务器进行单播更新。(如果每个客户端都能看到所有其他客户端都能看到的多播状态更新,那么拥有服务器的目的是什么?

您可以通过路由器配置限制对多播的访问,但不能使用java,而路由器lmiitation只是指它是否转发数据包。您必须使用数据包字段来限制谁响应什么。哦,谢谢。但我们需要通过程序来完成。那么你是说它不能在Java中完成吗?忽略任何不是来自服务器的数据包。一旦收到它们,就把它们扔掉。UDP应用程序始终必须处理来自以前会话的“游离”数据包或随机垃圾。只需编写代码来删除它们。您需要加入一个组来侦听数据包。如果你只允许一个加入者,没有人能听到你(尖叫;)。使用单播是不是一种缓慢的方法来编程一个涉及多个客户端和一个服务器的网络游戏?@brain56,+1只有当你接近网络的最大带宽时。大多数服务器都希望有1 Gb的网络连接。TCP更容易可靠地编程,我建议您先实现它,并在需要时更改它。@brain56,我不知道。取决于游戏的规模和用例。你希望它只在局域网上玩吗,或者这是用于网络游戏?如果有人启动第二台服务器会发生什么?(这会发生吗,还是只有一台服务器?@Mike,游戏将只在局域网上进行,但客户端的数量可以从3到10到20不等。同样的情况也会发生,同一网络中的两台服务器可以同时存在。@brain56,客户端如何选择它想要的游戏?(为什么不改为使用多个多播地址以避免此问题?)此外,客户端是否信任来自所有其他客户端的更新?如果使用多播,为什么还要有一个服务器?是否最好将每个客户端的更新单播到服务器,然后让服务器将游戏状态多播回网络?