我有一个由服务器和客户端进程组成的程序。两者都在 Windows 系统上运行 - Windows 2000 或更高版本。这两个进程可以在同一台机器上运行,也可以在两台不同的机器上运行。
客户端如何确定它是否与服务器运行在同一台机器上?如果服务器未运行,则客户端无论如何都无法工作,并且不关心服务器可能在哪里 - 所以这种情况是不可能的。我听说每台 Windows 机器都有一个 UUID - 我可以获取它并用于此目的吗?
上一个关于生成可能有帮助的唯一机器 ID 的问题。 链接到之前提到 MachineGUID 的答案
将 API 添加到报告其机器名称的服务器很简单。环境变量是 COMPUTERNAME。客户可以检查,对吗?
你需要处理这些情况吗?
网卡将具有唯一的 MAC。如果服务器和客户端都报告相同的 MAC,那么它们使用的是相同的网卡。如果客户端和服务器都运行在不同的虚拟机上但使用相同的网卡,你认为它们运行在同一台机器上还是不同的机器上?
Windows 网络要求计算机名称是唯一的,因此调用 GetComputerName api 并让客户端和服务器交换名称(并将接收到的名称与他们看到的名称进行比较)就足够了。如果客户端和服务器可以彼此独立启动,那么您将需要某种协议来完成此过程。客户端发起交换似乎是合乎逻辑的,而服务器仅在从客户端接收到名称时才发送其名称。然后,如果客户端看到相同的名称,它可以中止连接。
我相信大多数虚拟机系统都会允许虚拟机有自己的名字,所以你应该仍然可以在虚拟机上进行测试。但是我对所有虚拟化技术没有丰富的经验,所以不能肯定地说。
尝试建立环回 tcp 连接怎么样?或者可能检查服务器在预定义文件夹中创建的某些锁定文件...
我不知道具体是怎么做的,但是 Win32 中肯定有与 Unix 中的 /proc 文件系统等效的东西(我认为 windows 任务管理器有免费的替代品,也许你可以查看它们的来源),你可以在其中搜索你的服务器过程。