如何使用Stun和ice4j接收公共IP和端口

时间:2016-04-24 21:25:26

标签: java stun ice4j

我会尽量简短。

我希望在不通过服务器的情况下在两个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类,因为我自己也不太了解这段代码来修复它,我想知道你是否有人可以帮我解决上面的代码,或者给我看一个如何回答标题问题的例子。

然而,除非你能做我在最后一句中所说的话,或者指出一些示例代码,否则你的帮助很可能没有用,因为我精神上无法完全理解这背后的理论,因为我不知道的许多概念。

直到本周末我还要弄明白这一点,如果我不相信,我就搞砸了。所以,如果你能够或知道有人可以提供帮助,我将非常感激。

感谢您阅读目前为止并尝试提供帮助:)

1 个答案:

答案 0 :(得分:4)

你去了 SdpUtils.java

  

实际上我也在和我的大学项目一样工作。从上周开始,我正在挖掘用于建立over nat的p2p连接的网络   我知道你上面的代码snipet的形式,我想通知你,该代码中有错误这是我纠正的那个

{{1}}

}

  

此代码需要设置SIP服务器,而ice4j测试中的那个正在说其他内容只需查看Ice.java