潛魚在淵

          Concentrating on Architectures.

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

          為什么MulticastSocket不能正常工作?

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

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

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

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

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

          ??? 再次測試,成功!

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

          評論

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

          2006-06-29 19:59 by lizongbo

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

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

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

          2007-10-24 11:57 by 青銅人
          我也遇到這個(gè)情況,但這解決不了。請樓主加我qq:278216928幫我呀
          主站蜘蛛池模板: 翁牛特旗| 开平市| 葫芦岛市| 舒兰市| 昌宁县| 灌南县| 西平县| 梁河县| 田阳县| 新干县| 平湖市| 娱乐| 得荣县| 潍坊市| 香河县| 芦山县| 江山市| 靖边县| 祁阳县| 宁城县| 竹溪县| 虹口区| 湛江市| 玉屏| 满洲里市| 潮安县| 永仁县| 阜城县| 敦化市| 新津县| 海南省| 普定县| 绵阳市| 井研县| 青川县| 永德县| 沾化县| 泗阳县| 高雄县| 拉萨市| 紫金县|