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,所以它不起作用。
我正在尝试 运行 我的计算机上的游戏 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,所以它不起作用。