2012-03-07 86 views
2

我想建立一些程序,检测到如果某个游戏的服务器开启或关闭,我有IP和服务器的端口。检查服务器是否开启/关闭

什么我必须做的检测服务器是否打开或关闭?套接字?平班?

这将是很好,如果你们能够给我一个代码示例或东西。

非常感谢!

+1

http://www.codeproject.com/Tips/109427/How-to-PING-Server-in-C – 2012-03-07 12:02:40

+0

你应该只ping服务器。但是你必须认识到你不能说服务器是开着或者关闭的。假设你ping一台服务器,你的数据包可能永远不会到达服务器,因此即使服务器在线,它也永远不会收到请求,因此不会响应,因此您_think_它已脱机。当你得到响应时,服务器在发送响应之后可能已经崩溃,所以当你思考它在线时它可能是脱机的。但在你的情况下,这些不确定性可能可以忽略不计。 – Terkel 2012-03-07 12:10:03

+0

@SimonBangTerkildsen我不太了解网络,为什么这个数据包不会到达服务器?我的程序应该继续ping服务器,直到它变为在线。应该有一个问题呢? – idish 2012-03-07 12:14:44

回答

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操作就足以完成此任务。

作为每效率 - 爆震是更有效的(当然,在大规模计算)作为被在服务器和客户机之间交换的仅2个分组,而不是一个完整的连接建立是大约3个分组 - See TCP 3-Way handshake

+0

非常感谢您的回答,我只需要检查服务器是否开启或关闭,我不需要连接它,所以我的问题是:什么更有效地做,您的答案或JP Hellemons的答案(见评论)再次感谢你! – idish 2012-03-07 12:07:54

+0

@idish查看编辑 – Shai 2012-03-07 12:16:57

+0

非常感谢您的回答,我真的得走了,一旦我回来了,我会尽力的,谢谢! – idish 2012-03-07 12:20:47

1

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

然而,在大多数情况下,这是不可能的服务器计算机当机之间的不同,你和服务器之间的网络是向下,因为这两种情况下,将最有可能只是导致超时。

1

也许是更好地应对所有连接逻辑集中到一个经理,如果连接将被打破,只是告知客户端,服务器已关闭。这是错误的行为,一直ping服务器。

相关问题