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