2012-03-07 57 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服務器。

相關問題