c# - WAN 上的 TCP 和 UDP 套接字服务器

标签 c# networking tcp udp wan

我正在尝试创建一个同时使用 TCP 和 UDP 的服务器和客户端。服务器在 LAN 设置中运行良好,但在通过 WAN 传输时未收到 UDP 消息。我相信这是因为用于发送数据的 UDP 套接字在 NAT 表中的保留时间不足以返回任何信息。有没有办法让 UDP 端口在路由器中保持打开状态(没有端口转发)或使用与已连接的 TCP 连接相同的 UDP 端口?提前致谢。

最佳答案

如果您没有获得任何流量,它可能只是被防火墙阻止了。在这种情况下它不是关于转发,而是关于打开端口。

大多数(如果不是全部)NAT/防火墙设备在 NAT 被打穿一个洞后将允许双向的 UDP 流量。也就是说,如果我的笔记本电脑位于 NAT/防火墙后面,将 UDP 数据包发送到 Internet,我的 NAT/防火墙将允许将 UDP 流量返回到原始端口号。我经常使用 UDP,我的经验是这是规则,很少有异常(exception)。

请记住,虽然 UDP 数据包不能保证被传送。

您的客户端在 NAT 后面吗?客户端发送的任何数据包是否到达服务器?问题出在服务器到客户端方向吗?

如果您为 UDP 和 TCP 使用相同的端口号,这不会改变这种情况。您不能搭载 TCP 连接,因为它是一种不同的协议(protocol)。

Network Address Translation (NAT) Behavioral Requirements for Unicast UDP

http://en.wikipedia.org/wiki/UDP_hole_punching

关于c# - WAN 上的 TCP 和 UDP 套接字服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7020996/

相关文章:

networking - 在线发送数据/字符串到连接到互联网的设备

c# - 使用匹配的大括号拆分字符串的最佳方法

c# - 获取数组最后 N 个元素的最有效方法

networking - 协议(protocol)的选择?

java - 如何在等待响应时不阻塞地实现请求-响应协议(protocol)?

c# - 动态更改 TCPClient 端口

c# - Graphics.DrawString() 上的 AccessViolation

c# List<Items> with DateTime 获取过去 6 周的所有内容

c++ - WinAPI:如何确定网络何时正在识别?

c++ - 如何确定tcp客户端是否在C++中连接