在我的计算机上托管C#的公共TCP服务器
我正在尝试在我的计算机上运行游戏TCP/UDP服务器。它在本地网络中运行良好,但当我试图用我的公共IP运行服务器时,它就是不工作。我已尝试禁用路由器中的防火墙,为端口17000设置端口转发,并在计算机中添加了防火墙规则。我还将IP绑定到我的计算机 我已经用Wireshark检查了客户端调用,发现客户端(Unity game)正在向我的IP发送数据,但它给它尝试发送的每个TCP数据包提供TCP重新传输错误 有些代码来自服务器和客户端 服务器IP设置为192.168.0.*:17000 客户端正在使用端口17000连接到我的IP 服务器:在我的计算机上托管C#的公共TCP服务器,c#,tcp,server,udp,C#,Tcp,Server,Udp,我正在尝试在我的计算机上运行游戏TCP/UDP服务器。它在本地网络中运行良好,但当我试图用我的公共IP运行服务器时,它就是不工作。我已尝试禁用路由器中的防火墙,为端口17000设置端口转发,并在计算机中添加了防火墙规则。我还将IP绑定到我的计算机 我已经用Wireshark检查了客户端调用,发现客户端(Unity game)正在向我的IP发送数据,但它给它尝试发送的每个TCP数据包提供TCP重新传输错误 有些代码来自服务器和客户端 服务器IP设置为192.168.0.*: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);
}
客户端:
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,所以它不工作 这种情况很可能发生,因为侦听套接字仅绑定在本地网络接口上。尝试
新的TcpListener(IPAddress.Any,Port)
@Asti它不工作,我想我需要将它设置为静态地址,因为路由器正在端口将它转发到该地址,对吗?任何
都应该适用于所有网络地址。您是否使用第三方工具检查过是否可以从外部访问TCP服务器?那么,我已经检查了该端口,它是“过滤”的。所以我猜它仍然关闭,但我不知道为什么,因为路由器应该转发那个端口。