我需要在两个用户之间建立P2P UDP和TCP连接.他们都是NAT的背后.
一点研究让我想到了STUN,TURN和ICE.
除了jSTUN之外是否有任何Java解决方案(库),它似乎只能在UDP上运行.而TURN,ICE对于对称NAT问题要好得多.
不要过多地吹我自己的号角,但我可能会建议尝试IcedJava.(它是SipTools项目的一部分)它正在积极开发,具有稳定版本0.9版本,并支持RTP流式开箱即用的用例.
至于TCP支持,这是为了以后的版本,但是由于三次握手被阻止,你将很难支持TCP超过对称nat.即使是ICE规范的TCP扩展,也注意到TCP连接成功的可能性要小于自然对等体之间的UDP连接.
也就是说,您可以通过在UDP网桥上路由TCP数据包来解决此问题,包括所有纠错和流量控制功能.(我忘记了RFC,但它是最终的规范)但是,所有这些都是相对较新的规范,而ICE-TCP规范还不是最终的.即使在积极开发中,这些也需要时间来实施.
还有ice4j,根据开发人员的说法:
STUN和TURN和ICE协议的Java实现.该项目是Stun4J计划的延续.该项目的目标是为VoIP Java开发人员提供处理NAT和防火墙的方法.
它是由sipcommunicator devs开发的.