我正在尝试建立一个 P2P 即时消息系统,虽然我还没有遇到问题,但我预计如果客户端在本地 LAN 上的 NAT 后面我会遇到一些问题(阅读:每个人。)
让我解释一下算法,你就会明白我的意思。共有三个组件: 一个服务器和两个客户端 - 客户端 Alice 想要发起与客户端 Bob 的聊天。服务器只跟踪谁在线,但实际对话不会通过服务器(为了客户的隐私)
因此,Alice 和 Bob 都登录到服务器 - 从临时端口连接到服务器的静态侦听端口。他们告诉服务器他们正在侦听传入聊天请求的静态端口。Alice 询问服务器她如何联系 Bob。服务器使用 ipaddress 和侦听端口等进行响应。Alice 在该 IP 地址和端口上向 Bob 发送请求以建立连接。希望这是有道理的。
如果 Bob 在 NAT 之后,那么肯定他可以与服务器通信,因为他是开始通信的人。但是 Alice 的请求不会发送给他,因为尚未为他正在侦听来自 Alice 的 IP 地址的聊天请求的端口设置 NAT 关系。
是否有人知道某种黑魔法可以使这项工作发挥作用?会不会是个问题?开发还没有那么远,我还没有真正遇到这个问题。
显而易见,我不想让最终用户为他们的监听端口配置端口转发。
对于前面提到的黑魔法,客户端和服务器都在java中,但我通常只是在算法之后(如果可能的话)