我应该使用Java和哪些Stun库?

Java,我试图编写自己的STUN客户端,但似乎我犯了错误,因此,大部分时间它都被冻结了。 所以我想知道什么STUN客户端库可用于Java,开始。

跟进:(同时尝试以下,仍然没有涉及NAT /防火墙后面的解决方案)

第1步:眩晕课: http ://babbly.googlecode.com/svn/trunk/src/org/babbly/core/net/InetAddresResolver.java

/* modified */ import java.io.*; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.net.URLEncoder; import java.net.UnknownHostException; import net.java.stun4j.StunAddress; import net.java.stun4j.client.SimpleAddressDetector; import java.util.Random; public class stun { public static final int MAX_PORT_NUMBER = 65535; public static final int MIN_PORT_NUMBER = 1024; private static DatagramSocket socket = null; private static SimpleAddressDetector detector; public static synchronized InetAddress resolveInternetInterface(InetAddress dest) { InetAddress networkInterface = null; if(dest == null) { try { dest = InetAddress.getByName("78.12.2.61"); } catch (UnknownHostException e) { } } if(dest != null) { socket.connect(dest, getRandomPortNumber()); networkInterface = socket.getLocalAddress(); socket.disconnect(); } if(networkInterface == null || networkInterface.isAnyLocalAddress()) { try{ networkInterface = InetAddress.getLocalHost(); } catch (Exception ex){ } } return networkInterface; } public static synchronized InetAddress resolveInternetInterface() { return resolveInternetInterface(null); } public static int getRandomPortNumber() { return new Random().nextInt(MAX_PORT_NUMBER - MIN_PORT_NUMBER); } public static InetSocketAddress getPublicAddress(int localPort) { InetSocketAddress resolvedAddr = null; String stunAddressStr = "stun.xten.com"; String portStr = "3478"; int stunPort = Integer.parseInt(portStr); StunAddress stunAddr = new StunAddress(stunAddressStr, stunPort); detector = new SimpleAddressDetector(stunAddr); System.out.println("Created a STUN Address detector for the following " + "STUN server: " + stunAddressStr + ":" + stunPort); detector.start(); System.out.println("STUN server detector started;"); StunAddress mappedAddress = null; try { mappedAddress = detector.getMappingFor(localPort); } catch (IOException e) { e.printStackTrace(); } System.out.println("lala"); detector.shutDown(); if(mappedAddress != null) { System.out.println("stun: no nat detected"); resolvedAddr = mappedAddress.getSocketAddress(); } else { System.out.println("sun: nat detected, hitting the ip"); String dstProperty = "78.22.22.61"; // put the ip of the target to hit InetAddress destination = null; try { destination = InetAddress.getByName(dstProperty); } catch (UnknownHostException e) { e.printStackTrace(); } InetAddress publicHost = resolveInternetInterface(destination); resolvedAddr = new InetSocketAddress(publicHost, localPort); } return resolvedAddr; } 

第2步:使用它

 InetSocketAddress test; test = stun.getPublicAddress(40446); System.out.println("STUN: " + test.toString()); 

第3步:结果

 Created a STUN Address detector for the following STUN server: stun.xten.com:3478 STUN server detector started; Apr 18, 2011 7:04:16 PM net.java.stun4j.stack.NetAccessPoint start INFO: Bound a socket on ap: net.java.stun4j.stack.AccessPoint@0.0.0.0/0.0.0.0:40446 status: running Apr 18, 2011 7:04:17 PM net.java.stun4j.stack.NetAccessPoint stop INFO: Closed socket on ap net.java.stun4j.stack.AccessPoint@0.0.0.0/0.0.0.0:40446 status: running lala stun: no nat detected STUN: /78.12.2.61:40446 BUILD SUCCESSFUL (total time: 12 seconds) 

  • JSTUN: http ://jstun.javawi.de/
  • STUN: http : //java.net/projects/stun

另请参见: 用于Java的STUN,TURN,ICE库