【问题标题】:JXTA on internet互联网上的 JXTA
【发布时间】:2015-01-07 11:22:12
【问题描述】:

我正在使用 JXSE 在 Java 中开发基于 JXTA 的应用程序。它在本地工作得很好,但现在我尝试在互联网上完成这项工作。

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

现在,我有这 2 台计算机,以及其他本地网络上的 2 台计算机。据我了解,为了最低要求,我需要 2 个将连接的公共 RendezVous 对等点(每个本地网络上一个)。但我找不到如何处理它。

在我的应用程序中,我使用 setAutoStart 方法,这意味着如果需要,对等点将自动提升为 RendezVous 对等点。

所以我认为,如果不提供他们的公共地址,2 个遥远的同伴就不可能发现对方。所以我需要在对等方上检索一个有效的 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);

所以我会创建一个与 net_group.getRendezVousService 一起使用的 addRendezVous(URI uri) 或 addRendezVous(String uri),但我真的不知道如何找到 URI 或地址..

还有我的应用:

【问题讨论】:

    标签: java desktop-application p2p jxta


    【解决方案1】:

    根据我的经验,我可以提出以下建议:

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

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

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

    布尔连接 = NetworkManager.waitForRendezvousConnection(20 * 1000);

    此外,您可以将 Rendezvous Server 的种子地址添加到边缘对等方的网络配置中。这是我使用的代码:

    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 Server 中,如果连接成功,您将在控制台收到一条消息:

    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 地址:RendezvouServerTCPSeed = "tcp://192.XXX.X.XX:9705";如果我想分享我的软件,我不明白该怎么做(他们必须手动更改这个地址?)事实上,我希望一个同行可以连接到世界各地的任何其他人,而无需编辑源代码.有可能的 ? (例如一些torrent软件)我稍后会放一些日志。
    • 使用 URI theSeed = URI.create(adress);尝试 { networkManager.getConfigurator().addSeedRendezvous(theSeed); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } 请务必配置 RendezVous 路由器。
    猜你喜欢
    • 2010-11-25
    • 2018-08-05
    • 2015-08-05
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多