Public 在我的计算机上托管了 C# 的 TCP 服务器

Public TCP server with C# hosted on my computer

我正在尝试 运行 我的计算机上的游戏 TCP/UDP 服务器。它在本地网络中工作正常,但是当我尝试使用我的 public IP 运行 服务器时,它就不起作用了。我尝试禁用路由器中的防火墙,为端口 17000 设置端口转发并向我的计算机添加防火墙规则。我的电脑也绑定了IP

我已经用 Wireshark 检查了客户端调用,我发现客户端(Unity 游戏)正在向我的 IP 发送数据,但它正在尝试发送的每个 TCP 数据包都出现 TCP 重传错误。

有一些来自服务器和客户端的代码。

服务器IP设置为192.168.0.*:17000

并且客户端正在使用端口 17000 连接到我的 IP

服务器:

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);
    }

所以我发现,我设置了两个路由器,因为我只在一个路由器上转发端口 17000,所以它不起作用。