潜鱼在渊

Concentrating on Architectures.

posts - 77, comments - 309, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

    最近用到了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不成功,要注意是否使用了多个网络接口卡(物理的或逻辑的)。

posted @ 2006-06-28 23:35 非鱼 阅读(4120) | 评论 (2)编辑 收藏

     摘要: 忽然想到这个话题,是因为读书、思考、生活的一篇BLOG:代码质量与文档质量。当然如果庄子[注1]只是说代码质量或(比较)文档质量,我也就不会有什么想法了。可是该文一开始就上升到了“项目质量”的高度,在吸引了足够的眼球之后,又偷偷的把“项目质量”的概念换成了“代码质量”。  阅读全文

posted @ 2006-04-24 00:42 非鱼 阅读(1838) | 评论 (1)编辑 收藏

     摘要: 我们在讨论应用软件的需求和设计的时候,常常会说:“我觉得这个需求不合理。”或者说:“按照我的经验,这样子设计是不合理的。”往往我们这样说的时候,是根据自己的经验和直觉来判断的。这样的理由往往不被认同和接受,所以最终的结果可能并没有向我们所想象的方向发展,直到最终我们得到一个教训。  阅读全文

posted @ 2006-03-29 00:28 非鱼 阅读(16839) | 评论 (11)编辑 收藏

     摘要: 我想要的ORM。  阅读全文

posted @ 2006-01-12 00:39 非鱼 阅读(3239) | 评论 (3)编辑 收藏

     摘要: 关于架构的定义非常多,它们互相接近,但又有细微的差别。这些定义都基于系统来描述的。所以要理解架构,首先要理解系统的定义。  阅读全文

posted @ 2005-12-26 23:55 非鱼 阅读(3212) | 评论 (3)编辑 收藏

     摘要: 在分布式系统中,存在多个节点,每个节点都有自己的应用服务器和数据库系统。这些节点产生的信息对象可能被本地节点或异地节点所访问;在整个分布式系统中,也存在一些全局的信息对象,它们被分布式系统中的所有节点访问。  阅读全文

posted @ 2005-12-21 22:58 非鱼 阅读(2814) | 评论 (5)编辑 收藏

     摘要: 软件架构师不是建筑架构师。他们之间除了名字,没有任何的共同之处。把软件架构师和建筑架构师类比,甚至把他们等同起来,是一种错误的观念。  阅读全文

posted @ 2005-12-20 23:25 非鱼 阅读(3204) | 评论 (6)编辑 收藏

     摘要: 今天被鄙视了一下。一个编码比我好的朋友说:“非鱼,说实在的,我挺鄙视你搞的架构师小组的。基本功不扎实,就搞什么架构师,是我一向鄙视的行为。”其实我自己也认为自己不是一个合格的架构师,或许勉强算是一个预备役的架构师吧。  阅读全文

posted @ 2005-12-17 16:40 非鱼 阅读(3166) | 评论 (16)编辑 收藏

     摘要: 上一篇讲了发行管理的一些基本理论,最主要最根本的一点就是不要对发行的内容失去控制。在这个基础上逐步加强对发行节奏的协调,可以形成良好的软件发行管理制度,提高软件发行能力。下面要说的是发行过程中的一些细节。  阅读全文

posted @ 2005-12-16 21:31 非鱼 阅读(2303) | 评论 (2)编辑 收藏

     摘要: 发行是产品开发完成并交付客户安装、配置、使用的过程。软件发行做为生产完成或阶段性完成时刻的活动,不仅是一个短时期的任务,它和开发过程中的其他活动密切相关。  阅读全文

posted @ 2005-12-14 23:05 非鱼 阅读(1827) | 评论 (6)编辑 收藏

仅列出标题
共6页: 上一页 1 2 3 4 5 6 下一页