Я пытаюсь запустить игровой TCP / UDP-сервер на моем компьютере. Он хорошо работает в локальной сети, но когда я пытаюсь запустить сервер с моим publi c IP, он просто не работает. Я попытался отключить брандмауэр в моем маршрутизаторе, установить переадресацию портов для порта 17000 и добавить правило брандмауэра на мой компьютер. Я также привязал IP к своему компьютеру.
Я проверил клиентские вызовы с помощью Wireshark и обнаружил, что клиент (игра Unity) отправляет данные на мой IP, но выдает ошибку TCP Retransmission для каждого TCP-пакет, который он пытается отправить.
Есть некоторый код от сервера и клиента.
IP-адрес сервера установлен на 192.168.0. *: 17000
И клиент подключается к моему IP-адресу с портом 17000
СЕРВЕР:
public static void Start(byte _maxPlayers)
{
MaxPlayers = _maxPlayers;
Port = 17000;
Console.WriteLine("Starting server..");
InitializeServerData();
tcpListener = new TcpListener(GetLocalIPAddress(), Port);
tcpListener.Start();
tcpListener.BeginAcceptTcpClient(new AsyncCallback(TCPConnectCallback), null);
udpListener = new UdpClient(Port, GetLocalIPAddress().AddressFamily);
udpListener.BeginReceive(UDPReceiveCallback, null);
Console.WriteLine($"Server started on {tcpListener.LocalEndpoint}.");
}
КЛИЕНТ:
public void Connect()
{
socket = new TcpClient
{
ReceiveBufferSize = dataBufferSize,
SendBufferSize = dataBufferSize
};
receiveBuffer = new byte[dataBufferSize];
socket.BeginConnect(instance.ip, instance.port, ConnectCallback, socket);
}
private void ConnectCallback(IAsyncResult _result)
{
socket.EndConnect(_result);
if (!socket.Connected)
return;
stream = socket.GetStream();
receivedData = new Packet();
stream.BeginRead(receiveBuffer, 0, dataBufferSize, ReceiveCallback, null);
}