我的计算机上托管了带有C#的公共TCP服务器

时间:2020-04-13 14:13:11

标签: c# tcp server udp

我正在尝试在计算机上运行游戏TCP / UDP服务器。它在本地网络中运行良好,但是当我尝试使用公共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);
    }

1 个答案:

答案 0 :(得分:0)

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

相关问题