潛魚在淵

          Concentrating on Architectures.

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

          為什么MulticastSocket不能正常工作?

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

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

          ??? 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?}

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

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

          ??? 再次測試,成功!

          ??? 總結:使用MulticastSocket時,如果發現broadcast不成功,要注意是否使用了多個網絡接口卡(物理的或邏輯的)。

          評論

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

          2006-06-29 19:59 by lizongbo

          我昨天調試rmi也遇到類似的問題。

          也是雙網卡,死活會先認內網ip,后來終于找到原因了,呵呵

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

          2007-10-24 11:57 by 青銅人
          我也遇到這個情況,但這解決不了。請樓主加我qq:278216928幫我呀
          主站蜘蛛池模板: 拉萨市| 葵青区| 柳河县| 西峡县| 苗栗县| 建阳市| 灌云县| 长汀县| 大新县| 台南市| 临湘市| 阿克苏市| 托克逊县| 读书| 土默特右旗| 德保县| 瑞昌市| 宣汉县| 南和县| 堆龙德庆县| 林口县| 虹口区| 海城市| 芦溪县| 广西| 阿克| 弋阳县| 金湖县| 德格县| 喀什市| 小金县| 辽阳县| 尼木县| 新民市| 宁明县| 绿春县| 巩义市| 兴仁县| 海兴县| 商河县| 肥西县|