MulticastSocket确定收到的消息是否是单播

时间:2017-05-31 15:32:32

标签: java sockets multicast unicast

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

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

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

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

1 个答案:

答案 0 :(得分:1)

  

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

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

  

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

抱歉,Java无法帮助您。

  

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

是。进一步请注意,您不需要MulticastSocket 发送多播,也无需加入该群组即可发送。

相关问题