udpClient.BeginReceive обратный вызов не запускается в сети - PullRequest
0 голосов
/ 19 февраля 2020

Итак, я пытаюсь настроить сервер для Unity, и у меня возникла проблема.

У меня есть метод запуска:

        public static void Start(int _maxPlayers, int _port)
    {
        MaxPlayers = _maxPlayers;
        Port = _port;

        Console.WriteLine($"Starting server...");
        InitializeServerData();

        tcpListener = new TcpListener(IPAddress.Any, Port);
        tcpListener.Start();
        tcpListener.BeginAcceptTcpClient(new AsyncCallback(TCPConnectCallback), null);

        udpListener = new UdpClient(Port);
        udpListener.BeginReceive(UDPReceiveCallback, null);

        Console.WriteLine($"Server started on {Port}.");
    }

, но метод UDPReceiveCallback не будет вызываться при попытке подключиться с другого компьютера. Если у меня есть сервер и клиент на одном компьютере, это произойдет, но если я попробую это сделать с другим (TCP работает даже с другого компьютера, поэтому я предполагаю, что это как-то связано с UdpClient).

Это UDPReceiveCallback

private static void UDPReceiveCallback(IAsyncResult _result)
    {
        try
        {
            IPEndPoint _clientEndPoint = new IPEndPoint(IPAddress.Any, 0);
            byte[] _data = udpListener.EndReceive(_result, ref _clientEndPoint);
            udpListener.BeginReceive(UDPReceiveCallback, null);

            Console.WriteLine("BeginReceive callback");

            if(_data.Length < 4)
            {
                return;
            }

            using (Packet _packet = new Packet(_data))
            {
                int _clientId = _packet.ReadInt();

                if(_clientId == 0)
                {
                    return;
                }

                if(clientsMap[_clientId].udp.endPoint == null)
                {
                    clientsMap[_clientId].udp.Connect(_clientEndPoint);
                    return;
                }

                if(clientsMap[_clientId].udp.endPoint.ToString() == _clientEndPoint.ToString())
                {
                    clientsMap[_clientId].udp.HandleData(_packet);
                }
            }

        }
        catch(Exception ex)
        {
            Console.WriteLine($"Error receiving UDP data: {ex}");
        }
    }

Он не будет печатать даже первую Console.WriteLine

Спасибо

...