正在编写一个类似飞鸽传书的软件,想实现能在广域网内自动检测哪台主机开启了我写的程序,由此得到IP,再使用TCP进行传输。打算采用java的多播技术,目前在局域网内已经可以检测到开启我的程序的主机了,可不知道为什么广域网却不行?应该怎样设置多播类才能在广域网使用呢?

解决方案 »

  1.   

    可否使用个中间层, 当客户端打开时, 到中间层注册一下, 然后你的服务器发送消息时, 只要到中间层读取注册过的用户就行了.
    一点不成熟的意见.因为一个程序在系统中是用端口号来标志的, 在网络中就是用IP地址加端口号了, 但是不同的程序又可以使用同一个端口号, 所以如果去主动扫描的话, 一是耗时, 二是即使某IP地址的机器上使用了你的程序的端口号, 那个程序也未必会是你的这个程序.所以感觉主动注册还可以.
      

  2.   

    谢谢回复,能否指点一下中间层大体上应该怎么写呢,初学JAVA,不是很懂,谢谢了!!!
      

  3.   

    http://dev.csdn.net/article/20/20082.shtm
      

  4.   

    答:
    1)多播或称组播,在因特网上有很吸引人的潜力。94年开始的backbone是一个有名的组播实验网络(本质上不是一个新的物理网,而是那些支持组播功能的路由器的集合)。你若要在因特网上运行,首要的条件是组播路由器的支持(且只能在支持组播功能的路由器的集合的网络上运行)。因此,你必须打开你的路由器,开启组播功能,同时配置它,使得它能与它的上级组播路由器交换信息。
    2)JAVA组播程序的设计是很简单的,只要构造一个MulticastSocket(port)并加入一个组播组就行了,随后的发UDP包与收UDP包与UDP通信相同。注意的是:JAVA支持是IGMPV2版本的组播。因此,能够要注意的只是将UDP包的寿命ms.setTimeToLive(ttl)中ttl设置得大一些。其它你没有什么要做的。以上仅供你参考