我会尽量简短。
我希望在不通过服务器的情况下创建 2 个 java 应用程序(稍后将被传输到 android)之间的通信。因此,我花了数周时间环顾四周,经过大量工作,我发现了 stun 和 ice4j。我在这里找到了关于如何使用 ice4j 的最佳解释,它几乎向我展示了将 stun 服务器添加到代理需要做什么(我真的不知道代理是什么,只是它管理我与 STUN 的通信和转),通过此代码:
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);
}
}
}
但是,在此之后,本教程使用我在githubSDPUtils
上找到的 ice4j 源代码中的一个类来从代理接收 SDP 信息。但是,我从 中央 maven 存储库获得了 ice4j.jar ,并将其添加到我的 netbeans 常规项目中(我这样做是因为我对 maven 不是很熟悉,只是想在我的常规项目中添加一个常规库)。这个 jar 库没有这个类,由于我对这段代码的理解不够,无法自己修复它,我想知道你们中的任何人是否可以帮助我修复上面的代码,或者向我展示如何修复的示例回答标题上的问题。SDPUtils
但是,除非您可以按照我在上一句中所说的去做,或者给我一些示例代码,否则您的帮助很可能没有用,因为我在精神上无法完全理解这背后的理论,因为我有很多概念不知道。
我要等到本周末才能解决这个问题,如果我不这样做,我就完蛋了。因此,如果您可以或知道有人可以提供帮助,我将不胜感激。
感谢您到目前为止阅读并尝试提供帮助:)