2014-11-11 4 views
0

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

Например, у меня есть 2 компьютера в локальной сети. Они сразу найдут друг друга, и приложение будет работать. Нет проблем.

Теперь у меня эти 2 компьютера и еще 2 компьютера в другой локальной сети. Как я понимаю, мне нужно, для минимального требования, 2 публичных одноранговых RendezVous (по одному в каждой локальной сети), которые будут подключены. Но я не могу найти, как с этим бороться.

В моем приложении я использую метод setAutoStart, это означает, что одноранговый узел будет автоматически добавлен к одноранговому узлу RendezVous при необходимости.

Так что, я думаю, невозможно, чтобы 2-х удаленный друг обнаружил друг друга, не дав тогда их публичный адрес. Поэтому мне нужно получить действительный адрес tcp на одноранговом узле и передать его другим. Если кто-то знает, как это сделать, я буду очень счастлив!

Edit: мой конфиг

//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 или адрес ..

И мое приложение: My app

ответ

0

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

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

2) Сообщения журнала очень информативны. Можете ли вы опубликовать сообщения журнала, которые вы получаете? Посмотрите на то, как это в ваших логах: Новый затравки ... 31 июля 2013 6:50:05 PM net.jxta.impl.endpoint.netty.AsynchronousNettyMessenger connectionDied

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

boolean connected = NetworkManager.waitForRendezvousConnection (20 * 1000);

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

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(); 

В Рандеву сервера, если соединение успешно, вы получите сообщение на консоли, говоря:

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

+0

Спасибо за ваши ответы, извините за задержку. Я думаю, что понимаю это, но вы жестко закодировали IP-адрес Rendez vous peer: RendezvouServerTCPSeed = "tcp: //192.XXX.X.XX: 9705 "; Я не понимаю, как это сделать, если я хочу поделиться своим программным обеспечением (им пришлось вручную изменить этот адрес?) На самом деле, я хочу, чтобы один одноранговый узел мог подключиться к любому другому . по всему миру, без редактирования исходного кода это возможно (как некоторых торрент программного обеспечения для Exemple) Я поставил некоторый журнал позже – crashxxl

+0

работы с использованием URI theSeed = URI.create (адреса);?. \t \t попробовать { . \t \t \t networkManager.getConfigurator() addSeedRendezvous (theSeed); \t \t} поймать (IOException е) { \t \t \t // TODO автоматическая генерация улова блока \t \t \t e.printStackTrace(); \t \t} Обязательно настройте маршрутизатор rendezVous. – crashxxl