我想建立一些程序,檢測到如果某個遊戲的服務器開啓或關閉,我有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