Я постараюсь быть кратким.Как получить публичный IP и порт с помощью Stun и ice4j
Я хочу создать связь между двумя java-приложениями (которые позже будут переданы на андроид) без прохождения через сервер. Таким образом, я провел недели, оглядываясь по сторонам, и после многих работ я нашел оглушение и ice4j. Лучшее объяснение того, как использовать ice4j, я нашел here, и это в значительной степени показало мне, что мне нужно сделать, чтобы добавить оглушающих серверов к агенту (я не знаю, что такое агент, просто он управляет моими сообщениями с помощью STUN и TURN), через этот код:
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.ice4j.Transport;
import org.ice4j.TransportAddress;
import org.ice4j.ice.Agent;
import org.ice4j.ice.IceMediaStream;
import org.ice4j.ice.harvest.StunCandidateHarvester;
public class ice4jTesting {
public static void main(String[] args) {
Agent agent = new Agent();
String[] hostnames = new String[] {"jitsi.org", "numb.viagenie.ca", "stun.ekiga.net"};
for(String hostname: hostnames) {
try {
TransportAddress address;
address = new TransportAddress(InetAddress.getByName(hostname), 3478, Transport.UDP);
agent.addCandidateHarvester(new StunCandidateHarvester(address));
} catch (UnknownHostException ex) {
Logger.getLogger(SimpleStun.class.getName()).log(Level.SEVERE, null, ex);
}
}
IceMediaStream stream = agent.createMediaStream("audio");
int port = 5000;
try {
agent.createComponent(stream, Transport.UDP, port, port, port+100);
// The three last arguments are: preferredPort, minPort, maxPort
} catch (IllegalArgumentException | IOException ex) {
Logger.getLogger(SimpleStun.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
однако, после этого учебник использует SDPUtils
, класс, который находится в исходном коде ice4j я нашел на github, чтобы получать информацию о SDP от агента. Однако я получил ice4j.jar от the central maven repository и добавил его в свой обычный проект netbeans (я сделал это, потому что я не очень хорошо знаком с maven и просто хотел иметь регулярную библиотеку в своем обычном проекте). В этой библиотеке jar нет класса SDPUtils
, и поскольку я действительно недостаточно понимаю этот код, чтобы исправить его сам, мне было интересно, может ли кто-нибудь из вас помочь мне исправить код выше или показать мне пример того, как чтобы ответить на вопрос о названии.
Однако, если вы не можете сделать то, что я сказал в последнем предложении, или указать мне пример кода, ваша помощь, скорее всего, не будет полезна, поскольку я мысленно не способен понять теорию, лежащую в основе этого полностью из-за многие понятия я не знаю.
У меня есть до конца этой недели, чтобы понять это, и если я этого не сделаю, я довольно ввернута. Поэтому, пожалуйста, если вы можете или знаете кого-то, кто может помочь, я бы очень этому это оценил.
Спасибо за чтение его до сих пор и пытается помочь :)
Спасибо за ребяческие достижения ребята ... – RaKXeR