我的服务器当前能够发送和接收多播数据包。我添加了还可以接收和发送单播数据包的功能。因此,我创建了“ DatagramSocket uniRecv”和“ DatagramSocket uniSend”以模仿完成组播的方式。问题是当我收到一个数据包时,我需要一种方法来判断它是多播还是单播。我认为“ multiRecv.receive(packet)”仅适用于多播数据包,但显然也可以适用于单播数据包。有没有办法在执行.receive(packet)之前或之后告诉您它是哪种数据包?

我需要知道,因为当我发送响应时,必须使用与接收响应相同的方法来完成。因此,如果我接收到单播,则需要发送单播,如果我接收到多播,则需要发送多播。

另外,MulticastSocket也可以发送单播消息吗?

编辑:
尽管接受的帖子是正确的,但我仍然能够找到解决方法。通过强制服务器将数据包发送给我,以便使用不同的端口进行单播和多播,我可以使用packet.getPort()来确定哪个端口。

最佳答案

我需要一种方法来判断它是多播还是单播。我认为“ multiRecv.receive(packet)”仅适用于多播数据包,但显然也可以适用于单播数据包。有没有办法在执行.receive(packet)之前或之后告诉您它是哪种数据包?


不在Java中。在BSD Sockets API中,有一个功能可以检索数据报的目标地址,但是它不是用Java实现的。


  我需要知道,因为当我发送响应时,必须使用与接收响应相同的方法来完成。因此,如果我接收到单播,则需要发送单播,如果我接收到多播,则需要发送多播。


抱歉,在Java中无法为您提供帮助。


  另外,MulticastSocket也可以发送单播消息吗?


是。还要注意,您不需要MulticastSocket发送多播,也不需要加入任何一个即可发送组播。

10-06 13:08