我有一个由服务器和客户端进程组成的程序。两者都在Windows系统上运行 - Windows 2000或更高版本。这两个进程可以在同一台机器上运行,也可以在两台不同的机器上运行。
客户端如何确定它是否与服务器在同一台机器上运行?如果服务器没有运行,客户端无论如何都无法工作,也不关心服务器可能在哪里 - 所以这种情况是不可能的。我听说每台Windows机器都有一个UUID - 我可以获得它并用于此目的吗?
答案 0 :(得分:2)
Previous question about generating a unique machine id可能有所帮助。 Link to previous answer which mentions MachineGUID
向报告其计算机名称的服务器添加API非常简单。环境变量是COMPUTERNAME。客户可以检查一下,对吗?
你需要处理这些案件吗?
网卡将具有唯一的MAC。如果服务器和客户端报告相同的MAC,则他们使用相同的网卡。如果客户端和服务器都在不同的虚拟机中运行但使用相同的网卡,您是否认为它们在同一台计算机或不同的计算机上运行?
答案 1 :(得分:2)
Windows网络要求计算机名称是唯一的,因此调用GetComputerName api并具有客户端和服务器交换名称(并将收到的名称与他们看到的名称进行比较)应该足够了。如果客户端和服务器可以彼此独立启动,那么您将需要某种协议来完成此过程。客户端启动交换似乎合乎逻辑,服务器只有在从客户端收到名称时才发送其名称。然后,如果客户端看到相同的名称,则可以中止连接。
我相信大多数虚拟机系统都会允许虚拟机拥有自己的名称,因此您仍然可以在虚拟机上进行测试。但是我没有丰富的所有虚拟化技术经验,所以不能肯定地说。
答案 2 :(得分:1)
如何尝试建立环回tcp连接?或者可能检查服务器在预定义文件夹中创建的某些锁定文件...
我不知道究竟是怎么回事,但肯定会有一些与Win32中的/ proc文件系统相同的东西(我认为可以免费替换windows taskmanager,也许你可以查看它们的来源)为您的服务器进程。