我有一個包含服務器和客戶端進程的程序。兩者都在Windows系統上運行 - Windows 2000或更高版本。這兩個進程可以在同一臺機器上或兩臺不同的機器上運行。如何確定Windows機器的身份?
客戶端如何確定它是否與服務器在同一臺機器上運行?如果服務器沒有運行,客戶端無法正常工作,並且不關心服務器可能在哪裏 - 所以這種情況是不可能的。我聽說每臺Windows機器都有一個UUID--我可以獲得它並用於此目的嗎?
我有一個包含服務器和客戶端進程的程序。兩者都在Windows系統上運行 - Windows 2000或更高版本。這兩個進程可以在同一臺機器上或兩臺不同的機器上運行。如何確定Windows機器的身份?
客戶端如何確定它是否與服務器在同一臺機器上運行?如果服務器沒有運行,客戶端無法正常工作,並且不關心服務器可能在哪裏 - 所以這種情況是不可能的。我聽說每臺Windows機器都有一個UUID--我可以獲得它並用於此目的嗎?
Windows網絡需要計算機名稱是唯一的,因此調用GetComputerName api並使客戶端和服務器交換名稱(並將接收到的名稱與它們看到的名稱進行比較)就足夠了。如果客戶端和服務器可以獨立啓動,那麼在這個過程中你需要某種協議。客戶端啓動交換似乎是合乎邏輯的,服務器只在從客戶端收到名稱時才發送它的名稱。如果客戶端看到相同的名稱,則可以中止連接。
我相信大多數虛擬機系統都會允許虛擬機擁有自己的名字,所以它應該仍然可以在虛擬機上進行測試。然而,我並不具備所有虛擬化技術的豐富經驗,所以不能肯定地說。
如何嘗試建立一個環回tcp連接?或者可能檢查服務器在預定義文件夾中創建的一些鎖定文件...我不確切知道如何,但在Win32中有相當於Unix中/ proc文件系統的東西(我認爲有免費替換Windows任務管理器,也許你可以看看他們的來源),你可以在哪裏搜索你的服務器進程。
Previous question about generating a unique machine id這可能有幫助。 Link to previous answer which mentions MachineGUID
將API添加到報告其機器名的服務器很簡單。環境變量是COMPUTERNAME。客戶可以檢查,對嗎?
您是否需要處理這些情況?
網卡將具有唯一的MAC。如果服務器和客戶端報告相同的MAC,則他們使用相同的網卡。如果客戶端和服務器都在不同的虛擬機上運行,但使用相同的網卡,您認爲它們運行在同一臺機器上還是不同的機器上?
如果他們都應該在同一臺機器上運行,但服務器發生不運行,如果客戶端報告「我們在同一臺機器上運行」或「因爲服務器沒有運行,我不知道是否我們在同一臺機器上運行「? – 2009-05-22 08:56:04