Java internet上的JXTA

Java internet上的JXTA,java,desktop-application,p2p,jxta,Java,Desktop Application,P2p,Jxta,我正在用JXSE用Java开发一个基于JXTA的应用程序。它在本地运行得很好,但现在我尝试在互联网上获得这项工作 例如,我在本地网络上有两台计算机。他们将立即找到对方,应用程序将正常工作。没问题 现在,我有这两台计算机,另外两台计算机在另一个本地网络上。据我所知,对于最低要求,我需要2个公共集合点对等点,每个将连接的本地网络上都有一个。但是我找不到如何处理它 在我的应用程序中,我使用setAutoStart方法,这意味着如果需要,对等机将自动升级为集合对等机 所以我认为,两个相距遥远的同伴在没有

我正在用JXSE用Java开发一个基于JXTA的应用程序。它在本地运行得很好,但现在我尝试在互联网上获得这项工作

例如,我在本地网络上有两台计算机。他们将立即找到对方,应用程序将正常工作。没问题

现在,我有这两台计算机,另外两台计算机在另一个本地网络上。据我所知,对于最低要求,我需要2个公共集合点对等点,每个将连接的本地网络上都有一个。但是我找不到如何处理它

在我的应用程序中,我使用setAutoStart方法,这意味着如果需要,对等机将自动升级为集合对等机

所以我认为,两个相距遥远的同伴在没有公开地址的情况下是不可能发现对方的。因此,我需要在对等机上检索一个有效的tcp地址,并将其提供给其他人。如果有人知道怎么做,我会很高兴的

编辑:我的配置

//Network setup
    try {
        manager = new NetworkManager(NetworkManager.ConfigMode.EDGE, peer_name, conf.toURI());
    } catch (IOException e) {
        //chemin incorrect ? 
        e.printStackTrace();
        System.exit(-1);
    }

    try {
        NetworkConfigurator configurator = manager.getConfigurator();
        configurator.setTcpPort(port);
        configurator.setTcpEnabled(true);
        configurator.setTcpIncoming(true);
        configurator.setTcpOutgoing(true);
        configurator.setUseMulticast(true);
        configurator.setPeerID(peer_id);
    } catch (IOException e) {
        // ? Si le dossier a bien été crée pas trop de raison d'avoir cette exception 
        e.printStackTrace();
    }

// ..... some code ....... ///


    PeerGroup net_group = manager.startNetwork();

    net_group.getRendezVousService().setAutoStart(true);
因此,我将创建一个addRendezVousURI或addRendezVousString uri,用于net_group.getRendezVousService,但我真的不知道如何查找uri或地址

和我的应用程序:
根据我的经验,我可以提出以下建议:

1确保端口和IP地址已打开且可用。如果您有防病毒软件,请确保该端口已打开

2日志消息信息非常丰富。你能发布你收到的日志信息吗?在日志消息中查找类似的内容: 新种子。。。 2013年7月31日下午6:50:05 net.jxta.impl.endpoint.netty.AsynchronousNettyMessenger连接

3确保网络管理器在连接超时之前等待足够的时间连接到集合点。像这样的事情应该让边缘等待足够长的时间:

boolean connected=NetworkManager.waitForRendezvousConnection20*1000

此外,还可以将集合服务器的种子设定地址添加到边缘对等方的网络配置中。以下是我使用的代码:

NetworkManager edgePeerManager = new NetworkManager(NetworkManager.ConfigMode.EDGE,...);
NetworkConfigurator edgePeerConfigurator = edgePeerManager.getConfigurator();

// This is the rendezvous' IP address and listening port
RendezvouServerTCPSeed = "tcp://192.XXX.X.XX:9705";

edgePeerConfigurator.addRdvSeedingURI(RendezvouServerTCPSeed);

PeerGroup edgePeerGroup=  edgePeerManager.startNetwork();
在Rendezvous服务器中,如果连接成功,您将在控制台上收到一条消息:

INFO: Line 145 net.jxta.impl.endpoint.netty.NettyTransportClient.getMessenger()
processing request to open connection to tcp://192.XXX.X.XX:9705
net.jxta.impl.endpoint.netty.NettyTransportClient getMessenger
INFO: succeeded in connecting to tcp://192.XXX.X.XX:9705, remote peer has logical address     jxta://cbid-5961XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
如果你有解决问题的办法,一定要告诉我

谢谢
DD

谢谢你的回答,抱歉耽搁了。我想我理解这一点,但您硬编码了Rendez-vous对等机的IP地址:RendezvouseServerTcpseed=tcp://192.XXX.X.XX:9705; 如果我想分享我的软件,我不知道怎么做,他们必须手动更改这个地址?事实上,我希望一个同行可以连接到世界各地的任何其他同行,而无需编辑源代码。有可能吗?像一些torrent软件一样,我将在稍后放置一些日志。使用URI theSeed=URI.createAddress的作品;请尝试{networkManager.getConfigurator.addSeedRendezvouseTheed;}捕获IOException e{//TODO自动生成的捕获块e.printStackTrace;}确保配置集合路由器。