2009-05-22 26 views
2

我有一个包含服务器和客户端进程的程序。两者都在Windows系统上运行 - Windows 2000或更高版本。这两个进程可以在同一台机器上或两台不同的机器上运行。如何确定Windows机器的身份?

客户端如何确定它是否与服务器在同一台机器上运行?如果服务器没有运行,客户端无法正常工作,并且不关心服务器可能在哪里 - 所以这种情况是不可能的。我听说每台Windows机器都有一个UUID--我可以获得它并用于此目的吗?

+0

如果他们都应该在同一台机器上运行,但服务器发生不运行,如果客户端报告“我们在同一台机器上运行”或“因为服务器没有运行,我不知道是否我们在同一台机器上运行“? – 2009-05-22 08:56:04

回答

2

Windows网络需要计算机名称是唯一的,因此调用GetComputerName api并使客户端和服务器交换名称(并将接收到的名称与它们看到的名称进行比较)就足够了。如果客户端和服务器可以独立启动,那么在这个过程中你需要某种协议。客户端启动交换似乎是合乎逻辑的,服务器只在从客户端收到名称时才发送它的名称。如果客户端看到相同的名称,则可以中止连接。

我相信大多数虚拟机系统都会允许虚拟机拥有自己的名字,所以它应该仍然可以在虚拟机上进行测试。然而,我并不具备所有虚拟化技术的丰富经验,所以不能肯定地说。

1

如何尝试建立一个环回tcp连接?或者可能检查服务器在预定义文件夹中创建的一些锁定文件...我不确切知道如何,但在Win32中有相当于Unix中/ proc文件系统的东西(我认为有免费替换Windows任务管理器,也许你可以看看他们的来源),你可以在哪里搜索你的服务器进程。

2

Previous question about generating a unique machine id这可能有帮助。 Link to previous answer which mentions MachineGUID

将API添加到报告其机器名的服务器很简单。环境变量是COMPUTERNAME。客户可以检查,对吗?

您是否需要处理这些情况?

  1. 客户端正在运行,但服务器没有响应,并且您想知道无响应服务器是否在远程计算机上。
  2. 客户端和服务器在同一台主机上的两台不同的虚拟机上运行,​​并且您希望将其报告为“在同一台计算机上运行”。
  3. 客户端运行在与运行服务器的同一台机器上的虚拟机中,并且您希望将其报告为“运行在同一台计算机上”。
  4. 客户端和服务器在不协调的网络上运行,并且可能都被分配了相同的名称。
  5. 服务器可能是敌对的,并会试图欺骗客户端。

网卡将具有唯一的MAC。如果服务器和客户端报告相同的MAC,则他们使用相同的网卡。如果客户端和服务器都在不同的虚拟机上运行,​​但使用相同的网卡,您认为它们运行在同一台机器上还是不同的机器上?

相关问题