1

我正在编写一个程序,它需要两个客户端(点对点)在不使用任何服务器的情况下相互连接,即使只是在配对过程中也是如此。两个客户端都已经知道彼此的公共和私有 IP。一个或两个客户端可能位于 NAT 后面。我不能依赖 IPv6。

我遇到的问题是一个客户端(我们称他们为 A)必须将数据包发送到另一个(B),后者在 A 的 NAT 上打了一个洞并通过 B 的已经打孔的 NAT。但是,这要求 A 知道 B 已穿通到的 B 的 NAT 上的外部端口,因为不能使用 B 在 NAT 后面的本地端口。此外,B 无法从其 NAT 后面识别此端口。 我的问题的可视化表示 有没有办法辨别这个端口,或者甚至只是让 B 告诉 NAT 使用哪个端口?

提前致谢。

PS 我正在使用 .NET Unity 使用的版本,大约 2.0。

PPS 如果您有适用于 TCP 的解决方案,我也会接受!

PPPS 或除 Http 之外的几乎任何协议!

4

1 回答 1

1

您必须有一个众所周知的公共服务器才能在 2 个端点之间进行协商。

这是这个概念在 c# 中的一个很好的实现: https ://github.com/7wingfly/P2Pchat

于 2016-06-26T15:39:18.653 回答