JXTA в интернете

Я разрабатываю JXTA-приложение на Java с помощью JXSE. В местном масштабе это работает очень хорошо, но теперь я пытаюсь получить эту работу в Интернете.

Например, у меня есть 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);

Поэтому я хотел бы создать addRendezVous(URI URI) или addRendezVous (String URI), которые работают с net_group.getRendezVousService, но я действительно не знаю, как найти URI или адрес..

И мое приложение:Мое приложение

1 ответ

Решение

Исходя из моего опыта, я могу предложить следующее:

1) убедитесь, что порт и IP-адрес открыты и доступны. Если у вас есть антивирус, убедитесь, что порт открыт.

2) Сообщения журнала очень информативны. Можете ли вы публиковать полученные сообщения? Ищите что-то подобное в своих сообщениях журнала: New Seeding... 31 июля 2013 18:50:05 net.jxta.impl.endpoint.netty.AsynchronousNettyMessenger connectionDied

3) Убедитесь, что администратор сети ожидает достаточно времени для подключения к рандеву до истечения времени ожидания соединения. Что-то вроде этого заставит край ждать достаточно долго:

логическое соединение = NetworkManager.waitForRendezvousConnection(20 * 1000);

Кроме того, вы можете добавить начальный адрес сервера Rendezvous в конфигурацию сети пограничного узла. Вот код, который я использовал:

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

Другие вопросы по тегам