潛魚在淵

          Concentrating on Architectures.

          posts - 77, comments - 309, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          為什么MulticastSocket不能正常工作?

          Posted on 2006-06-28 23:35 非魚 閱讀(4134) 評論(2)  編輯  收藏 所屬分類: Java技術(shù)
          ??? 最近用到了MulticastSocket,發(fā)現(xiàn)在有些情況下它不能工作,當然這是編碼的問題,是一個BUG,不過這個BUG較少出現(xiàn),一旦出現(xiàn)了也讓人摸不著頭緒。

          ??? 由于以前沒有用過這個東東,首先在網(wǎng)上找了個簡單的例子:

          ??? Server端:

          ?1?import?java.net.DatagramPacket;
          ?2?import?java.net.InetAddress;
          ?3?import?java.net.MulticastSocket;
          ?4?
          ?5?public?class?Server?{
          ?6???public?static?void?main(String?[]?arstring)?{
          ?7?????try?{
          ?8???????//?Create?a?multicast?datagram?socket?for?receiving?IP
          ?9???????//??multicast?packets.??Join?the?multicast?group?at
          10???????//??230.0.0.1,?port?7777.
          11???????MulticastSocket?multicastSocket?=?new?MulticastSocket(7777);
          12???????InetAddress?inetAddress?=?InetAddress.getByName("230.0.0.1");
          13???????multicastSocket.joinGroup(inetAddress);
          14???????//?Loop?forever?and?receive?messages?from?clients.??Print
          15???????//??the?received?messages.
          16???????while?(true)?{
          17?????????byte?[]?arb?=?new?byte?[100];
          18?????????DatagramPacket?datagramPacket?=?new?DatagramPacket(arb,?arb.length);
          19?????????multicastSocket.receive(datagramPacket);
          20?????????System.out.println(new?String(arb));
          21???????}
          22?????}
          23?????catch?(Exception?exception)?{
          24???????exception.printStackTrace();
          25?????}
          26???}
          27?}

          ??? Client端:

          ?1?public?class?Client?{
          ?2???public?static?void?main(String?[]?arstring)?{
          ?3?????try?{
          ?4???????//?Create?a?datagram?package?and?send?it?to?the?multicast
          ?5???????//??group?at?230.0.0.1,?port?7777.
          ?6???????for?(;?;)?{
          ?7?????????byte?[]?arb?=?new?byte?[]{'h',?'e',?'l',?'l',?'o'};
          ?8?????????InetAddress?inetAddress?=?InetAddress.getByName("230.0.0.1");
          ?9?????????DatagramPacket?datagramPacket?=
          10?????????????????new?DatagramPacket(arb,?arb.length,?inetAddress,?7777);
          11?????????MulticastSocket?multicastSocket?=?new?MulticastSocket();
          12?//??????multicastSocket.joinGroup(inetAddress);
          13?????????multicastSocket.send(datagramPacket);
          14???????}
          15?????}
          16?????catch?(Exception?exception)?{
          17???????exception.printStackTrace();
          18?????}
          19???}
          20?}

          ??? 在公司編譯、運行都正常,回到家里發(fā)現(xiàn)Server不能收到broadcast消息了。跟蹤程序也沒有發(fā)現(xiàn)問題,網(wǎng)上也沒有找到答案。后來考慮到公司和家 里的網(wǎng)絡(luò)情況不同:公司里是通過內(nèi)網(wǎng)連接到INTERNET;在家則是在局域網(wǎng)上撥號連接到INTERNET,相當于有兩個邏輯的網(wǎng)絡(luò)接口卡。于是在上述 例子中增加如下代碼:

          multicastSocket.setNetworkInterface(NetworkInterface.getByInetAddress(InetAddress.getLocalHost()));

          ??? 再次測試,成功!

          ??? 總結(jié):使用MulticastSocket時,如果發(fā)現(xiàn)broadcast不成功,要注意是否使用了多個網(wǎng)絡(luò)接口卡(物理的或邏輯的)。

          評論

          # re: 為什么MulticastSocket不能正常工作?  回復  更多評論   

          2006-06-29 19:59 by lizongbo

          我昨天調(diào)試rmi也遇到類似的問題。

          也是雙網(wǎng)卡,死活會先認內(nèi)網(wǎng)ip,后來終于找到原因了,呵呵

          # re: 為什么MulticastSocket不能正常工作?  回復  更多評論   

          2007-10-24 11:57 by 青銅人
          我也遇到這個情況,但這解決不了。請樓主加我qq:278216928幫我呀
          主站蜘蛛池模板: 唐河县| 东兰县| 碌曲县| 汝阳县| 永德县| 游戏| 勐海县| 巴彦县| 华亭县| 林州市| 德阳市| 柯坪县| 论坛| 泽州县| 密山市| 南昌市| 巢湖市| 莲花县| 磴口县| 将乐县| 正蓝旗| 云林县| 高雄市| 古蔺县| 武陟县| 安泽县| 丽江市| 雷州市| 甘南县| 棋牌| 吉水县| 维西| 泰和县| 芷江| 佳木斯市| 浪卡子县| 三亚市| 孙吴县| 田阳县| 简阳市| 涟水县|