gpt4 book ai didi

c# - .NET UDP 客户端在互联网上的使用不起作用

转载 作者:行者123 更新时间:2023-11-30 23:01:44 25 4
gpt4 key购买 nike

我有一个相当复杂的客户端服务器应用程序,它具有三个独立的 UDP 连接。

一个连接(端口 50001)用于控制一个设备。此连接监听来自远程设备的连接,并在建立连接时发送和接收数据。这在 LAN 和 Internet 上都可以正常工作。当然,在服务器网络上启用了端口转发。这也适用于手机热点。

另一个连接用于将 UDP 声音从客户端发送到服务器(端口 50002)。在这种情况下,客户端只是使用路由器的互联网 IP 地址将 UDP 数据包发送到服务器,然后通过端口转发到达服务器。这在 LAN 和使用手机热点的 Internet 上运行良好。

现在出现问题的第三个连接(端口50003)。这个连接是客户端从服务器接收声音。如果我在 LAN 上并直接连接到服务器,或者如果我指定路由器的 Internet 地址,这将起作用。但它不适用于热点。

所以问题是,这是移动提供商的问题,只是不允许 UDP 数据包通过端口 50003 进入吗?或者,我没有正确连接到热点吗?

所以代码是这样工作的:当从客户端建立连接到服务器以控制设备时,我获取远程 IPEndpoint 地址并保存它。接下来,我开始使用这个地址从服务器向客户端发送 UPD 数据包。同样,这可以通过 LAN 直接连接到客户端,但如果我使用热点,它就不起作用。

代码如下:
注意:address 包含来自第一个连接的远程客户端的地址:

private void Connect(string address, int port) //at this point the control connection is running and the address comes from there
{
IPAddress destination = IPAddress.Parse(address)
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
endPoint = new IPEndPoint(destination, port);
}

private void SendBytes(Byte[] bytes)
{
socket.SendTo(bytes, 0 , bytes.,Length, SocketFlags.None, endPoint)
}

所以这个完全相同的代码在从客户端到服务器的方向上工作,但在那种情况下,我将 UDP 数据包发送到启用了端口转发的路由器互联网地址。但是,它在从服务器到客户端的方向上不起作用。问题是为什么不呢?

是不是因为热点没有端口转发?为什么控件不需要一个(连接一个??)。

我应该提到控制连接与这两者不同:它是一个异步 UDP 服务器。

谢谢

最佳答案

您认为问题出在热点端口转发缺失的假设是正确的。

热点提供的 IP 地址通常来自私有(private)范围(例如 192.168.x.y),并使用 NA(P)T 转换为热点的公共(public) IP 地址。

当您从客户端向服务器发送UDP 消息时,热点中的路由器会保留源和目标IP 地址和端口的信息。当使用相同的 IP 和端口收到答复时,此消息将转发给客户端。

但是当你使用不同的端口号时,路由器不知道这个消息应该发送给谁。

如果可能,我建议第三个连接也由客户端发起,或者数据通过其他两个现有连接之一发送。

关于c# - .NET UDP 客户端在互联网上的使用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50863554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com