【问题标题】:MulticastSocket determine if message received was unicastMulticastSocket 确定收到的消息是否为单播
【发布时间】:2017-05-31 15:32:31
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java sockets multicast unicast


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 你认为如果我尝试在 DatagramSocket 上接收多播数据包,我会得到某种空值或错误,可以用来判断它不是单播,因此必须是多播?我已经尝试过这样做,但到目前为止,它似乎超出了我放入该行的功能。
    • ADatagramSocket 无法加入多播组,因此无法接收多播数据报。它不会得到“某种空值”:除了单播数据报,它什么也得不到。
    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2010-09-21
    • 2014-11-23
    • 2021-04-27
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    相关资源
    最近更新 更多