加入现有的JXTA/JXSE PeerGroup

7
我在使用JXSE时遇到了问题。 假设我有一个RendezVous对等点和一个Edge对等点,它们不在同一本地网络中。
RendezVous对等点创建了一个名为“test”的对等组,并在该组中发布了一个名为“test advertisement”的广告。
假设我确定我的EdgePeer已连接到RendezVous对等点。我可以通过netpeerGroup.getRemoteAdvertisements()找到现有的“test”组。
但是我不知道如何加入这个现有的组。我尝试了netpeergroup.newGroup(testAdv),其中testAdv是已找到的peerGroupAdvertisement。
我无法在“test” PeerGroup中找到广告“test advertisement”。 但是如果我在本地进行所有操作,它就能正常工作。也许我不理解JXTA在本地和互联网上的工作方式的区别。
以下是创建或加入组的代码:
public void addGroup(final String name) {
    ModuleImplAdvertisement mAdv = null;
    PeerGroup group = null;
    temp = null;

    defaultGroup.getDiscoveryService().getRemoteAdvertisements(null, DiscoveryService.GROUP, 
            "Name", name, 1, new DiscoveryListener() {

                @Override
                public void discoveryEvent(DiscoveryEvent event) {
                    Enumeration<Advertisement> advs = event.getResponse().getAdvertisements();
                    while(advs.hasMoreElements()) {
                        System.out.println("groupe found");
                        PeerGroupAdvertisement adv = (PeerGroupAdvertisement) advs.nextElement();
                        System.out.println("group name : " + adv.getName());
                        try {
                            temp = defaultGroup.newGroup(adv);
                            System.out.println("group joined");
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }

                }
            });

    try {
        Thread.sleep(10000);
        System.out.println("waiting for group ...");
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    if(temp == null) {
        try {
            System.out.println("creating new group ..");
            mAdv = defaultGroup.getAllPurposePeerGroupImplAdvertisement(); /* Getting the advertisement of implemented modules */
            temp = defaultGroup.newGroup(generatePeerGroupID(name), mAdv, name, name); /* creating & publishing the group */
            getDefaultGroup().getDiscoveryService().remotePublish(temp.getPeerGroupAdvertisement());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
1个回答

2

终于找到问题所在。您需要在每个组上启动RendezVous服务,而不仅仅是netPeerGroup。

这就是为什么我的软件在本地工作但在互联网上无法工作的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接