未通过 UDP 从 VPS 接收数据

问题描述 投票:0回答:1

下午,

我在 VPS 上运行此代码:

while (isRunning)
        {
            UdpReceiveResult result = await upClient.ReceiveAsync();
            if (isFirstConnection)
            {
                downClient.Connect(result.RemoteEndPoint.Address, 8000);
                isFirstConnection = false;
            }
            Debug.Log("Data received");
            byte[] buffer = result.Buffer;
            await downClient.SendAsync(buffer, buffer.Length);
            Debug.Log("Data sent " + result.RemoteEndPoint.Address);
        }

这似乎有效并将数据发送回原始计算机,但下面的代码没有收到它。 Debug.Log("Data sent " + result.RemoteEndPoint.Address) 显示正确的 IP。

 downClient = new UdpClient(8000);
        Debug.Log("Start Receive");
        while (isRunning)
        {
            UdpReceiveResult result = await downClient.ReceiveAsync();
            Debug.Log("Getting data" + result.Buffer[0]);
        }

我已在 VPS 防火墙上打开端口,但未在本地防火墙上打开端口,因为这需要在任何计算机上运行。当服务器和客户端都在同一台机器上时,它可以完美地工作。

我有什么做错的地方吗?这是防火墙问题吗?如果是,我该如何解决? 任何帮助或调试技巧表示赞赏。

编辑:按照@jdweng的建议,我一直在使用Netstat来查看启动客户端时打开的端口。我注意到了这一点:

UDP 0.0.0.0:64455 88.208.xx.xxx:8000 IP 地址是我的 VPS 的地址,因此推测这就是我的数据发送的地方。每次运行客户端时,端口号显然是随机变化的。

现在的问题是如何从客户端内部获取此端口号?

c# unity-game-engine udp vps
1个回答
0
投票

像往常一样,面对这些问题,我找错了地方。简单的答案是我的代码是错误的。

这就是它应该看起来的样子。

服务器:

while(true){
    UdpReceiveResult result = await UDPClient.ReceiveAsync();
    byte[] buffer = result.Buffer;
    await Server.UDPClient.SendAsync(newData, newData.Length, result.RemoteEndPoint);
}

客户端发送循环:

while(true)
{
    await Client.SendAsync(bytes, bytes.Length, serverEndPoint);
}

客户端接收循环:

while (isRunning)
{
      UdpReceiveResult result = await Client.ReceiveAsync();
      bytes[] newData = result.Buffer;

}

就这么简单。只要使用同一个客户端发送和接收,客户端就会将消息中的本地端点发送到服务器。一旦您调用 receive,它就会自动侦听该端点。

© www.soinside.com 2019 - 2024. All rights reserved.