检查服务器是否开启/关闭

时间:2012-03-07 12:01:12

标签: c# sockets networking network-programming

我正在尝试构建一些检测的程序,如果某个游戏的服务器打开或关闭,我有服务器的IP和端口。

我需要做些什么来检测服务器是打开还是关闭?套接字? Ping班?

如果你们能给我一个代码样本或其他东西,那就太好了。

非常感谢!

3 个答案:

答案 0 :(得分:3)

请参阅Socket.Connect

public static void Connect1(string host, int port)
{
    IPAddress[] IPs = Dns.GetHostAddresses(host);

    Socket s = new Socket(AddressFamily.InterNetwork,
        SocketType.Stream,
        ProtocolType.Tcp);

    Console.WriteLine("Establishing Connection to {0}", 
        host);
    s.Connect(IPs[0], port); // Catch any exceptions here.
    Console.WriteLine("Connection established");
}   

通过ping服务器,您可以获得服务器是“开启”还是“关闭”的指示;它不会指示您尝试连接的服务是否正在运行。

如果第一个选项是您正在寻找的(通常了解服务器是否已打开并连接到互联网),ping就足以完成此任务。

根据效率 - ping更有效(嗯,大规模)因为服务器和客户端之间只交换了2个数据包,而不是大约3个数据包的完整连接建立 - See TCP 3-Way handshake

答案 1 :(得分:1)

您可以通过尝试连接服务器来检查服务器计算机是否已打开,但服务器程序未运行。如果服务器程序正在运行,您将被连接,但如果它没有运行,您将收到“连接被拒绝”错误。

但是,在大多数情况下,服务器机器关闭以及您和服务器之间的网络关闭是不可能的,因为这两种情况很可能只会导致超时。

答案 2 :(得分:1)

也许最好将所有连接逻辑集中到一个管理器中,如果连接断开,只需通知客户端服务器已关闭。这是错误的行为,一直ping服务器。