﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;span style="font-weight: bold"&gt;&lt;font color="lightgreen"&gt;潜鱼在渊&lt;/font&gt;&lt;/span&gt;-随笔分类-Java技术</title><link>http://www2.blogjava.net/feelyou/category/4842.html</link><description>&lt;h1&gt;&lt;span style="font-weight: bold;font-style: italic;"&gt;&lt;font color="lightgreen"&gt;Concentrating on Architectures.&lt;/font&gt;&lt;/span&gt;&lt;/h1&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 00:18:04 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 00:18:04 GMT</pubDate><ttl>60</ttl><item><title>为什么MulticastSocket不能正常工作？</title><link>http://www.blogjava.net/feelyou/archive/2006/06/28/55639.html</link><dc:creator>非鱼</dc:creator><author>非鱼</author><pubDate>Wed, 28 Jun 2006 15:35:00 GMT</pubDate><guid>http://www.blogjava.net/feelyou/archive/2006/06/28/55639.html</guid><wfw:comment>http://www.blogjava.net/feelyou/comments/55639.html</wfw:comment><comments>http://www.blogjava.net/feelyou/archive/2006/06/28/55639.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/feelyou/comments/commentRss/55639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feelyou/services/trackbacks/55639.html</trackback:ping><description><![CDATA[    最近用到了MulticastSocket，发现在有些情况下它不能工作，当然这是编码的问题，是一个BUG，不过这个BUG较少出现，一旦出现了也让人摸不着头绪。<br /><br />
    由于以前没有用过这个东东，首先在网上找了个简单的例子：<br /><br />
    Server端：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 128);"> 1</span> <span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.net.DatagramPacket;<br /></span><span style="color: rgb(0, 128, 128);"> 2</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.net.InetAddress;<br /></span><span style="color: rgb(0, 128, 128);"> 3</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.net.MulticastSocket;<br /></span><span style="color: rgb(0, 128, 128);"> 4</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 5</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> Server {<br /></span><span style="color: rgb(0, 128, 128);"> 6</span> <span style="color: rgb(0, 0, 0);">  </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> main(String [] arstring) {<br /></span><span style="color: rgb(0, 128, 128);"> 7</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"> {<br /></span><span style="color: rgb(0, 128, 128);"> 8</span> <span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> Create a multicast datagram socket for receiving IP<br /></span><span style="color: rgb(0, 128, 128);"> 9</span> <span style="color: rgb(0, 128, 0);">      </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">  multicast packets.  Join the multicast group at<br /></span><span style="color: rgb(0, 128, 128);">10</span> <span style="color: rgb(0, 128, 0);">      </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">  230.0.0.1, port 7777.</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">11</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">      MulticastSocket multicastSocket </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> MulticastSocket(</span><span style="color: rgb(0, 0, 0);">7777</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);">12</span> <span style="color: rgb(0, 0, 0);">      InetAddress inetAddress </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> InetAddress.getByName(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">230.0.0.1</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);">13</span> <span style="color: rgb(0, 0, 0);">      multicastSocket.joinGroup(inetAddress);<br /></span><span style="color: rgb(0, 128, 128);">14</span> <span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> Loop forever and receive messages from clients.  Print<br /></span><span style="color: rgb(0, 128, 128);">15</span> <span style="color: rgb(0, 128, 0);">      </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">  the received messages.</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">16</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">) {<br /></span><span style="color: rgb(0, 128, 128);">17</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);"> [] arb </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);"> [</span><span style="color: rgb(0, 0, 0);">100</span><span style="color: rgb(0, 0, 0);">];<br /></span><span style="color: rgb(0, 128, 128);">18</span> <span style="color: rgb(0, 0, 0);">        DatagramPacket datagramPacket </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> DatagramPacket(arb, arb.length);<br /></span><span style="color: rgb(0, 128, 128);">19</span> <span style="color: rgb(0, 0, 0);">        multicastSocket.receive(datagramPacket);<br /></span><span style="color: rgb(0, 128, 128);">20</span> <span style="color: rgb(0, 0, 0);">        System.out.println(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> String(arb));<br /></span><span style="color: rgb(0, 128, 128);">21</span> <span style="color: rgb(0, 0, 0);">      }<br /></span><span style="color: rgb(0, 128, 128);">22</span> <span style="color: rgb(0, 0, 0);">    }<br /></span><span style="color: rgb(0, 128, 128);">23</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);"> (Exception exception) {<br /></span><span style="color: rgb(0, 128, 128);">24</span> <span style="color: rgb(0, 0, 0);">      exception.printStackTrace();<br /></span><span style="color: rgb(0, 128, 128);">25</span> <span style="color: rgb(0, 0, 0);">    }<br /></span><span style="color: rgb(0, 128, 128);">26</span> <span style="color: rgb(0, 0, 0);">  }<br /></span><span style="color: rgb(0, 128, 128);">27</span> <span style="color: rgb(0, 0, 0);">}</span></div><br />
    Client端：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 128);"> 1</span> <span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> Client {<br /></span><span style="color: rgb(0, 128, 128);"> 2</span> <span style="color: rgb(0, 0, 0);">  </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> main(String [] arstring) {<br /></span><span style="color: rgb(0, 128, 128);"> 3</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"> {<br /></span><span style="color: rgb(0, 128, 128);"> 4</span> <span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> Create a datagram package and send it to the multicast<br /></span><span style="color: rgb(0, 128, 128);"> 5</span> <span style="color: rgb(0, 128, 0);">      </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">  group at 230.0.0.1, port 7777.</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 6</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (; ;) {<br /></span><span style="color: rgb(0, 128, 128);"> 7</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);"> [] arb </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);"> []{</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">h</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">e</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">l</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">l</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">o</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">};<br /></span><span style="color: rgb(0, 128, 128);"> 8</span> <span style="color: rgb(0, 0, 0);">        InetAddress inetAddress </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> InetAddress.getByName(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">230.0.0.1</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);"> 9</span> <span style="color: rgb(0, 0, 0);">        DatagramPacket datagramPacket </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">10</span> <span style="color: rgb(0, 0, 0);">                </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> DatagramPacket(arb, arb.length, inetAddress, </span><span style="color: rgb(0, 0, 0);">7777</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);">11</span> <span style="color: rgb(0, 0, 0);">        MulticastSocket multicastSocket </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> MulticastSocket();<br /></span><span style="color: rgb(0, 128, 128);">12</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">      multicastSocket.joinGroup(inetAddress);</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">13</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        multicastSocket.send(datagramPacket);<br /></span><span style="color: rgb(0, 128, 128);">14</span> <span style="color: rgb(0, 0, 0);">      }<br /></span><span style="color: rgb(0, 128, 128);">15</span> <span style="color: rgb(0, 0, 0);">    }<br /></span><span style="color: rgb(0, 128, 128);">16</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);"> (Exception exception) {<br /></span><span style="color: rgb(0, 128, 128);">17</span> <span style="color: rgb(0, 0, 0);">      exception.printStackTrace();<br /></span><span style="color: rgb(0, 128, 128);">18</span> <span style="color: rgb(0, 0, 0);">    }<br /></span><span style="color: rgb(0, 128, 128);">19</span> <span style="color: rgb(0, 0, 0);">  }<br /></span><span style="color: rgb(0, 128, 128);">20</span> <span style="color: rgb(0, 0, 0);">}</span></div><br />
   
在公司编译、运行都正常，回到家里发现Server不能收到broadcast消息了。跟踪程序也没有发现问题，网上也没有找到答案。后来考虑到公司和家
里的网络情况不同：公司里是通过内网连接到INTERNET；在家则是在局域网上拨号连接到INTERNET，相当于有两个逻辑的网络接口卡。于是在上述
例子中增加如下代码：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">multicastSocket.setNetworkInterface(NetworkInterface.getByInetAddress(InetAddress.getLocalHost()));</span></div><br />
    再次测试，成功！<br /><br />
    总结：使用MulticastSocket时，如果发现broadcast不成功，要注意是否使用了多个网络接口卡（物理的或逻辑的）。<br /><img src ="http://www.blogjava.net/feelyou/aggbug/55639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feelyou/" target="_blank">非鱼</a> 2006-06-28 23:35 <a href="http://www.blogjava.net/feelyou/archive/2006/06/28/55639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转换数组到列表</title><link>http://www.blogjava.net/feelyou/archive/2005/12/04/22471.html</link><dc:creator>非鱼</dc:creator><author>非鱼</author><pubDate>Sun, 04 Dec 2005 13:53:00 GMT</pubDate><guid>http://www.blogjava.net/feelyou/archive/2005/12/04/22471.html</guid><wfw:comment>http://www.blogjava.net/feelyou/comments/22471.html</wfw:comment><comments>http://www.blogjava.net/feelyou/archive/2005/12/04/22471.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/feelyou/comments/commentRss/22471.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feelyou/services/trackbacks/22471.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 刚刚有人问，如何把一个数组(Array)变成列表(List)。当然用FOR循环也是可以的，他是想要一个看上去简单的方法。<br><br>&nbsp;&nbsp;&nbsp; 这个也就对Java入门者说说吧。使用Arrays.asList()方法可以达到目的。示例如下：<br><br>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="color: rgb(0, 128, 128);">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"><span style="color: rgb(0, 0, 0);">public&nbsp;List&nbsp;aMethod(String</span><span style="font-weight: bold; color: rgb(128, 0, 0);">[]</span><span style="color: rgb(0, 0, 0);">&nbsp;sArray)&nbsp;{<br></span><span style="color: rgb(0, 128, 128);">2</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Arrays.asList(sArray)</span><span style="color: rgb(0, 128, 0);">;<br></span><span style="color: rgb(0, 128, 128);">3</span><span style="color: rgb(0, 128, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"></span><span style="color: rgb(0, 0, 0);">}<br></span><span style="color: rgb(0, 128, 128);">4</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"></span></div><br>&nbsp;&nbsp;&nbsp;关于Arrays的更多用法，请参考<!--StartFragment --> <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html">Java 2 Platform API Specification</a> <img src ="http://www.blogjava.net/feelyou/aggbug/22471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feelyou/" target="_blank">非鱼</a> 2005-12-04 21:53 <a href="http://www.blogjava.net/feelyou/archive/2005/12/04/22471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>代码检查指南</title><link>http://www.blogjava.net/feelyou/archive/2005/12/01/code_inspect.html</link><dc:creator>非鱼</dc:creator><author>非鱼</author><pubDate>Thu, 01 Dec 2005 12:32:00 GMT</pubDate><guid>http://www.blogjava.net/feelyou/archive/2005/12/01/code_inspect.html</guid><wfw:comment>http://www.blogjava.net/feelyou/comments/22157.html</wfw:comment><comments>http://www.blogjava.net/feelyou/archive/2005/12/01/code_inspect.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/feelyou/comments/commentRss/22157.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feelyou/services/trackbacks/22157.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 讲述代码检查存在的问题。&nbsp;&nbsp;<a href='http://www.blogjava.net/feelyou/archive/2005/12/01/code_inspect.html'>阅读全文</a><img src ="http://www.blogjava.net/feelyou/aggbug/22157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feelyou/" target="_blank">非鱼</a> 2005-12-01 20:32 <a href="http://www.blogjava.net/feelyou/archive/2005/12/01/code_inspect.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java线程安全精解</title><link>http://www.blogjava.net/feelyou/archive/2005/11/17/thread_safe_detail.html</link><dc:creator>非鱼</dc:creator><author>非鱼</author><pubDate>Wed, 16 Nov 2005 17:59:00 GMT</pubDate><guid>http://www.blogjava.net/feelyou/archive/2005/11/17/thread_safe_detail.html</guid><wfw:comment>http://www.blogjava.net/feelyou/comments/20165.html</wfw:comment><comments>http://www.blogjava.net/feelyou/archive/2005/11/17/thread_safe_detail.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/feelyou/comments/commentRss/20165.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/feelyou/services/trackbacks/20165.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 解释Java线程安全的细节。&nbsp;&nbsp;<a href='http://www.blogjava.net/feelyou/archive/2005/11/17/thread_safe_detail.html'>阅读全文</a><img src ="http://www.blogjava.net/feelyou/aggbug/20165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/feelyou/" target="_blank">非鱼</a> 2005-11-17 01:59 <a href="http://www.blogjava.net/feelyou/archive/2005/11/17/thread_safe_detail.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>