STUN, TURN, ICE library for Java

Hemeroc picture Hemeroc · Jan 11, 2010 · Viewed 15.9k times · Source

I need to establish a P2P UDP and TCP Connection between two Users. Both of them are behind a NAT.

A little research leads me to STUN, TURN and ICE.

Is there any Java solution (library) except jSTUN which seems to work only on UDP. And TURN, ICE is much better for the symmetric NAT Problem.

Answer

SplinterReality picture SplinterReality · Dec 17, 2010

Not to toot my own horn too much, but might I recommend trying IcedJava. (It's a part of the SipTools project) It's actively being developed, has a stable release 0.9 version, and supports use cases like RTP streaming out of the box.

As far as TCP support, that's slated for a later release, but you're going to have a hard time supporting TCP over symmetric nat due to the three way handshake being blocked. Even the TCP extensions to the ICE specification note that TCP connections are much less likely to succeed than UDP connections between natted peers.

That said, you can workaround this by routing TCP packets over a UDP bridge, including all of the error correction and flow control features. (I forget the RFC for this, but it is a final specification) Still, all of these are relatively new specifications, and the ICE-TCP spec is not yet final. Even in active development, these will take time to implement.