2012-05-26 36 views
0

我有限的Java Socket的經驗,並使用TCP的所有。我正在學習UDP。我正在運行使用UDP多播的多進程應用程序。經過一些簡短的研究(以及我對這個主題的新認識)之後,我認爲多播是正確的方法。UDP組播是正確的選擇?

隱喻我想要所有的過程共享相同的「房間」,並應在「互相呼喊」。因此,當進程1發送消息「hello」時,我想要所有進程2..n來接收該數據包,反之亦然。

起初,它似乎都工作,但後來我意識到我有一個錯誤(如果你可以稱之爲)。我啓動第一個進程,當啓動第二個進程時,第一個進程接收第二個進程,但反之亦然。

我想知道,當我在處理1做MulticastSocket receive(),是effecitvely採取這一DatagramPacket掀起了堆棧然後處理2沒有看到當它是​​?

回答

2

問題不在協議的選擇 - TCP/IP不會幫助,UDP廣播也不會。

問題是操作系統的網絡堆棧在當前沒有任何內容正在監聽時不緩衝網絡通信。這就是第二個過程發生的情況。

總之,你的方案不能工作。


一種選擇是有一個「新」的過程中多播「是誰呀」的消息,並有所有其他的與多播或定向數據包做出響應。但是,您正在這裏重新發明輪子。這個問題已經被各種「中間件」堆棧解決了很多次。

+0

感謝您的快速和徹底的答覆。我想我會實施誰在那裏計劃。 :/ – Ternary