我想建立一些程序,检测到如果某个游戏的服务器开启或关闭,我有IP和服务器的端口。检查服务器是否开启/关闭
什么我必须做的检测服务器是否打开或关闭?套接字?平班?
这将是很好,如果你们能够给我一个代码示例或东西。
非常感谢!
我想建立一些程序,检测到如果某个游戏的服务器开启或关闭,我有IP和服务器的端口。检查服务器是否开启/关闭
什么我必须做的检测服务器是否打开或关闭?套接字?平班?
这将是很好,如果你们能够给我一个代码示例或东西。
非常感谢!
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操作就足以完成此任务。
作为每效率 - 爆震是更有效的(当然,在大规模计算)作为被在服务器和客户机之间交换的仅2个分组,而不是一个完整的连接建立是大约3个分组 - See TCP 3-Way handshake
您可以检查服务器计算机是否已打开,但服务器程序未通过尝试连接到服务器计算机运行。如果服务器程序正在运行,您将会连接,但如果它未运行,您将收到“连接被拒绝”错误。
然而,在大多数情况下,这是不可能的服务器计算机当机之间的不同,你和服务器之间的网络是向下,因为这两种情况下,将最有可能只是导致超时。
也许是更好地应对所有连接逻辑集中到一个经理,如果连接将被打破,只是告知客户端,服务器已关闭。这是错误的行为,一直ping服务器。
http://www.codeproject.com/Tips/109427/How-to-PING-Server-in-C – 2012-03-07 12:02:40
你应该只ping服务器。但是你必须认识到你不能说服务器是开着或者关闭的。假设你ping一台服务器,你的数据包可能永远不会到达服务器,因此即使服务器在线,它也永远不会收到请求,因此不会响应,因此您_think_它已脱机。当你得到响应时,服务器在发送响应之后可能已经崩溃,所以当你思考它在线时它可能是脱机的。但在你的情况下,这些不确定性可能可以忽略不计。 – Terkel 2012-03-07 12:10:03
@SimonBangTerkildsen我不太了解网络,为什么这个数据包不会到达服务器?我的程序应该继续ping服务器,直到它变为在线。应该有一个问题呢? – idish 2012-03-07 12:14:44