0

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

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

另一方面,MulticastSocket 也可以发送单播消息吗?

编辑:虽然接受的帖子是真实的,但我能够找到解决方法。通过强制服务器将数据包发送给我,使用不同的端口进行单播和多播,我能够通过使用 packet.getPort() 找出它是哪一个。

4

1 回答 1

1

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

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

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

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

另一方面,MulticastSocket 也可以发送单播消息吗?

是的。并进一步注意,您不需要发送多播,也不需要加入组来发送MulticastSocket

于 2017-06-01T00:30:55.207 回答