TCP-сервер Publi c с C# на моем компьютере - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь запустить игровой 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);
    }

1 Ответ

0 голосов
/ 13 апреля 2020

Итак, я обнаружил, что у меня настроено два маршрутизатора, и поскольку я переадресовывал порт 17000 только на один маршрутизатор, он не работал.

...