Итак, я пытаюсь настроить сервер для 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
Спасибо