我正在尝试在计算机上运行游戏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);
}
答案 0 :(得分:0)
所以我发现,我设置了两个路由器,并且因为我只在一个路由器上转发了端口17000,所以它不起作用。