我正在尝试构建一些检测的程序,如果某个游戏的服务器打开或关闭,我有服务器的IP和端口。
我需要做些什么来检测服务器是打开还是关闭?套接字? Ping班?
如果你们能给我一个代码样本或其他东西,那就太好了。
非常感谢!
答案 0 :(得分:3)
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服务器。