我需要在两个用户之间建立 P2P UDP 和 TCP 连接。它们都在 NAT 后面。
除了似乎只适用于 UDP 的jSTUN之外,是否有任何 Java 解决方案(库) 。反过来,ICE 对对称 NAT 问题的处理要好得多。
不要过分吹嘘自己的号角,但我可能会建议尝试IcedJava。(它是 SipTools 项目的一部分)它正在积极开发中,有一个稳定的 0.9 版本,并支持开箱即用的 RTP 流等用例。
就 TCP 支持而言,这将在以后的版本中发布,但是由于三向握手被阻止,您将很难通过对称 nat 支持 TCP。即使是 ICE 规范的 TCP 扩展,也注意到 TCP 连接成功的可能性远低于 NAT 对等点之间的 UDP 连接。
也就是说,您可以通过在 UDP 网桥上路由 TCP 数据包来解决此问题,包括所有纠错和流量控制功能。(我忘记了 RFC,但它是一个最终规范)不过,所有这些都是相对较新的规范,ICE-TCP 规范还不是最终的。即使在积极开发中,这些也需要时间来实施。
还有ice4j,根据开发人员的说法:
STUN 和 TURN 以及 ICE 协议的 Java 实现。该项目是 Stun4J 计划的延续。该项目的目标是为 VoIP Java 开发人员提供一种处理 NAT 和防火墙的方法。
它是由 sipcommunicator devs 开发的。
您可以尝试jstunt - 不再维护,但源似乎可用。他们提供了一个带有 STUNT 库和示例 java 服务器/客户端应用程序的 jar。根据我的阅读,它不是本机 Java,因此这可能仅适用于某些架构。