我会尽量简短。
我希望在不通过服务器的情况下在两个java应用程序之间建立通信(稍后将被传输到android)。因此,我花了几周的时间环顾四周,经过大量的工作,我发现了晕眩和ice4j。关于如何使用ice4j的最佳解释我找到here,它几乎向我展示了我需要做什么才能将stun服务器添加到代理(我不知道代理是什么,只是那个它通过以下代码管理我与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
,这是我在github找到的ice4j源代码中的一个类,用于从代理收到SDP信息。但是我从the central maven repository获得了ice4j.jar,并将其添加到我的netbeans常规项目中(我之所以这样做是因为我对maven不是很熟悉,只是想在我的常规项目中使用常规库)。这个jar库没有SDPUtils
类,因为我自己也不太了解这段代码来修复它,我想知道你是否有人可以帮我解决上面的代码,或者给我看一个如何回答标题问题的例子。
然而,除非你能做我在最后一句中所说的话,或者指出一些示例代码,否则你的帮助很可能没有用,因为我精神上无法完全理解这背后的理论,因为我不知道的许多概念。
直到本周末我还要弄明白这一点,如果我不相信,我就搞砸了。所以,如果你能够或知道有人可以提供帮助,我将非常感激。
感谢您阅读目前为止并尝试提供帮助:)
答案 0 :(得分:4)
你去了
SdpUtils.java
实际上我也在和我的大学项目一样工作。从上周开始,我正在挖掘用于建立over nat的p2p连接的网络 我知道你上面的代码snipet的形式,我想通知你,该代码中有错误这是我纠正的那个
{{1}}
}
此代码需要设置SIP服务器,而ice4j测试中的那个正在说其他内容只需查看Ice.java