场景:
A 想通过端口 12345 向 B 发送数据。
B 需要端口转发才能接收传入连接。
B有什么方法可以在不进行端口转发的情况下接收数据吗?
打洞确实需要中间有一个服务器。那么有没有其他方法可以不需要中间有服务器呢?
UPNP 不是一个好的选择,因为我读到它需要路由器启用它。
最佳答案
不可能(据我所知)通过packets在不引用端口号的情况下不共享同一网络的 2 个客户端之间。并且它是 TCP 还是 UDP 都没有关系。
您从计算机发送的每个数据都会转换并打包为数据包 - 始终如一!
您使用的是哪种编程语言并不重要,因为它发生在网络和传输层
中,根据到 OSI model
网络数据包必须包含:
- 来源IP
- 源端口
- 目的IP
- 目的港
为了更好地理解,我可以想一个小类比:
假设您想去国外拜访一位 friend
国家。
您知道飞往哪个国家/地区(外部 IP 地址)
并且您知道您在该国家/地区的 friend 地址(内部 ip 地址)。
但是当你到达时,你不知道要乘坐哪趟火车才能到达你 friend 的家(端口号)。
因此,如果不知道确切的火车(端口号),您将无法拜访您的 friend 。
如果你去机场的信息站(路由器)询问这个车次确实存在(路线图/端口转发配置)
他们会指示您需要乘坐火车的位置,然后您就可以去拜访您的 friend 。
这就是为什么您必须在路由器中配置端口转发的原因 - 为了更新路由映射
关于c# - 无需端口转发的 UDP/TCP 发送和接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47479123/