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

C# WAN上的TCP和UDP套接字服务器,c#,networking,tcp,udp,wan,C#,Networking,Tcp,Udp,Wan,我正在尝试创建一个同时使用TCP和UDP的服务器和客户端。该服务器在LAN设置下运行良好,但通过WAN传输时,UDP消息未被接收。我认为这是因为用于发送数据的UDP套接字在NAT表中的时间不足以返回任何信息。有没有办法使UDP端口在路由器中保持打开状态(无端口转发),或者使用与已连接的TCP连接相同的UDP端口?提前感谢。如果你没有收到任何流量,可能只是被防火墙屏蔽了。在这种情况下,它不是关于转发,而是关于打开端口 大多数(如果不是全部的话)NAT/防火墙设备在NAT上穿孔后将允许双向UDP通信

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

如果你没有收到任何流量,可能只是被防火墙屏蔽了。在这种情况下,它不是关于转发,而是关于打开端口

大多数(如果不是全部的话)NAT/防火墙设备在NAT上穿孔后将允许双向UDP通信。也就是说,如果我的笔记本电脑位于NAT/防火墙后面,将UDP数据包发送到Internet,那么我的NAT/防火墙将允许通过网络将UDP流量返回到原始端口号。我经常使用UDP,我的经验是这是规则,很少有例外

请记住,虽然UDP数据包不能保证交付

你的客户支持NAT吗?客户端发送的任何数据包是否都会到达服务器?问题是否在服务器到客户端的方向上

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


是,问题出在服务器到客户端的方向上。我相信问题可能在于你所说的。我目前没有使用UDP传输最初发送的端口,因此无法通过NAT返回。我将尝试调整客户端和服务器以适应这种情况。谢谢你的回答。我尝试了你的建议,但仍然没有成功。我让服务器检索WAN IP和用户在连接时发送的端口,然后客户端在所有端口上侦听来自服务器的通信。您是否可以查看一些代码,看看是否有明显的错误?“我很感激。”斯蒂芬。当然添加问题的链接。我的方法是在服务器端使用recvfrom()和sendto()。将该套接字绑定到特定的端口号。在客户端,请确保使用单个套接字。@Stephen-我看不到客户端在代码中向何处发送UDP消息。您可能需要创建一个客户端UDP套接字。给它送点东西。然后在同一个套接字对象上接收(可能在另一个线程上)。另外,您正在执行trans.ReceiveFrom(content,ref Remote);但是我看不到您在哪里执行发送回远程端点的操作,而这正是服务器需要执行的操作。@Stephen由于NAT,您需要使用远程端点。在服务器端,您实际上不知道对等端口号是什么。NAT翻译它。