c# - 无需端口转发的 UDP/TCP 发送和接收

标签 c# tcp udp

场景:

A 想通过端口 12345B 发送数据。

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/

相关文章:

java - 无法通过udp发送大图像文件

c# - 该字符串未被识别为有效的 DateTime。文本格式的日期

c# - Entity Framework 无法导入执行 FTS 的存储过程

c# - 迭代回到列表 C# 的开头

tcp - F# (TcpClient) 中的 netcat 代码段等效项

linux - 多线程和多 TCP 连接

Windows CE 5 中的 C# 应用程序最终崩溃

c# - App_Code 类中的全局资源

c++ - NtDeviceIoControlFile(查询 IP 地址条目)- STATUS_INVALID_DEVICE_REQUEST

Android 广播超过 3g