2017-05-31 57 views
0

我的服務器當前能夠發送和接收多播數據包。我增加了接收和發送單播數據包的功能。所以我創建了「DatagramSocket uniRecv」和「DatagramSocket uniSend」來模擬多播的方式。問題是,當我收到一個數據包時,我需要一種方法來判斷它是多播還是單播。我認爲「multiRecv.receive(packet)」只能用於多播數據包,但顯然它也可以用於單播數據包。有沒有辦法告訴之前或之後做.receive(包)來檢測它是哪種類型的數據包?MulticastSocket確定收到的消息是否是單播的

我需要知道,因爲當我發出回覆時,必須使用與收到的相同的方法完成回覆。所以如果我收到單播,我需要發送單播,如果我收到多播,我需要發送多播。

另一方面,MulticastSocket也可以發送單播消息嗎?

編輯: 雖然接受的職位是真實的,我能找到解決辦法。通過強制服務器發送數據包給我,使用不同的端口進行單播和多播,我能夠通過使用packet.getPort()找出它是哪一個。

回答

1

我需要一種方法來判斷它是多播還是單播。我認爲「multiRecv.receive(packet)」只能用於多播數據包,但顯然它也可以用於單播數據包。有沒有辦法告訴之前或之後做.receive(包)來檢測它是哪種類型的數據包?

不是在Java中。在BSD套接字API中,有一個功能可以檢索數據報的目標地址,但它不是用Java實現的。

我需要知道,因爲當我發出響應時,必須使用與接收到的相同方法完成響應。所以如果我收到單播,我需要發送單播,如果我收到多播,我需要發送多播。

對不起,在Java中不能幫助你。

另一方面,MulticastSocket也可以發送單播消息嗎?

是的。另外請注意,您不需要MulticastSocket發送組播,並且您不需要加入組即可發送。

+0

您是否認爲如果我試圖在DatagramSocket上接收多播數據包,我會得到某種空值或錯誤,可用於告知它不是單播的,因此必須進行多播?我嘗試過這樣做,但到目前爲止,它似乎突破了我放入該行的功能。 – khm

+0

DatagramSocket不能加入多播組,因此無法接收多播數據報。它不會得到「某種空值」:除了單播數據報之外,它不會得到任何東西。 – EJP

相關問題