假如现在有100台电脑在一个大的局域网中,而且ip地址是有路由器动态分配的,不确定子网掩码,但是现在还想把这100台机子划分成2个不同的子区域,有2个数据源,利用组播分别对应发送给自己子区域的机子信息,该怎么办?不知道我描述清楚没?

解决方案 »

  1.   

    IP地址是动态的没问题,但子网掩码应该是确定的吧?可以用 MulticastSocket 来实现组播,具体样例直接Google吧,很多的。
    跨网段组播的话,必须路由支持才行,一般是禁用的,因为容易引起广播风暴。
      

  2.   

    是这样的,是在手机上使用,不可以设置掩码的啊。ip 地址是每次登陆的时候才动态分配的,之后进行操作,操作之前必须知道数据源机子的ip地址。有什么办法让接收数据的知道数据源ip?现在变成两个问题了。
      

  3.   

    手机恐怕是不能使用组播,没记错的话似乎基站直接忽略组播报文。Wifi还有点戏
    知道数据源IP倒没问题,本来就可以从Channel中取到:
    SocketChannel.socket().getRemoteSocketAddress()
      

  4.   

    Wifi还有点戏这是什么意思?是说如果手机使用wifi的话可以接收组播报文?我理解力较差啊。
    还有,我有两个数据源,用你说的办法能确定是和手机客户端通信的那个吗?谢谢啦。
      

  5.   

    你对组播的原理可能不太熟悉,组播本身是需要交换机将报文广播给每一个终端的。而无线网络为了避免广播风暴,一般是禁用组播的。也就是你的 Wifi无线路由器,缺省配置应该是禁用广播。为此,需要去检查下你的Wifi无线路由器,关于广播的配置,是否为许可。上述是组播(广播)的问题。
    不考虑组播的话,假设Client已经跟Server建立了TCP连接,那么双方都能直接得知对方的IP地址,这是必需的,否则建立TCP连接的前提都已经不存在了。所以你第二个问题并不是问题。
      

  6.   

    谢谢你的回答。对于第二个问题,我可能没有说清楚。双方建立连接之前不知道对方的ip,这就是问题,我怎么样让对方知道目的ip?
      

  7.   

    哦,你的命题是:双方都不知道对方的IP地址,但是需要相互通讯。这种情况下确实一般基于广播来做发现过程,但非有线网络的话,这种行为确实很容易被制约。
    制约的原因我已经解释过多次,貌似也并没有十分好的解决方案。
    传统的手机联机,多半都是走蓝牙或红外(更土)。
    而走GRPS或3G的话,基本上是基于某服务器来做中转的(类似QQ了)。貌似你除了试试Wifi来做组播外,也没啥更好方案了。