C# 如果客户端Udp端口在一个端口上打孔到服务器,我是否可以假设它将从同一端口发送到服务器上的不同端口?

C# 如果客户端Udp端口在一个端口上打孔到服务器,我是否可以假设它将从同一端口发送到服务器上的不同端口?,c#,multithreading,sockets,networking,udp,C#,Multithreading,Sockets,Networking,Udp,很难解释,这里是一步一步: 客户端通过Udp向服务器发送数据。客户端端口X到服务器端口3000 服务器使用此通信设置UdpClient,以便在客户端端口X的端口3001上侦听此特定客户端 然后,客户端根据需要将本地端口X上的数据发送到服务器端口3001 每个人都很快乐 我的问题是:如果客户端与NAT后面的服务器通信,并且它与同一服务器上的另一个端口通信,那么它将使用同一个端口,我是否可以假设 [编辑:格式化]不,您不能假设这一点。它可能会发生,也可能不会发生,这取决于客户端正在穿越的NAT防火墙

很难解释,这里是一步一步:

  • 客户端通过Udp向服务器发送数据。客户端端口X到服务器端口3000
  • 服务器使用此通信设置UdpClient,以便在客户端端口X的端口3001上侦听此特定客户端
  • 然后,客户端根据需要将本地端口X上的数据发送到服务器端口3001
  • 每个人都很快乐
  • 我的问题是:如果客户端与NAT后面的服务器通信,并且它与同一服务器上的另一个端口通信,那么它将使用同一个端口,我是否可以假设


    [编辑:格式化]

    不,您不能假设这一点。它可能会发生,也可能不会发生,这取决于客户端正在穿越的NAT防火墙软件的编写者


    一个复杂的软件可能会检测到您正在与同一台服务器通话,但使用不同的端口,并重新使用出站端口,但更简单的软件(您经常在家庭路由器上看到的那种)可能会“更笨”,只需在每个连接中使用一个新的随机端口。

    上述步骤中的穿孔在哪里?在第一步中。当客户端发送Udp数据并打开端口X时。