2009-12-10 145 views
0

我在同一台机器上有一个服务器和客户端程序。服务器是应用程序的一部分 - 可以任意启动和停止。当服务器启动时,我希望客户端连接到服务器的侦听套接字。有win32函数来等待文件系统更改(ReadDirectoryChangesW)和注册表更改(RegNotifyChangeKeyValue) - 是否有任何类似的网络更改?我宁愿不让客户不断地投票。有没有办法在win32上等待监听套接字?

回答

1

没有这样的Win32 API,但是这可以通过使用事件轻松完成。客户将等待该事件发出信号。服务器在启动时会发出事件信号。

您需要使用的相关API是CreateEvent,OpenEvent,SetEvent,ResetEventWaitForSingleObject

如果您的服务器将作为服务运行,那么对于Vista和它将运行在会话0隔离。这意味着您需要使用名称前缀为“Global \”的事件。

,有可能是有一个很好的理由需要这一点,但你实现在此之前请考虑:

  • 是有一些原因,你需要一个连接,对吗?我认为这不是问题,因为如果您在客户端执行某个操作,那么您可以在此创建一个新的服务器连接。
  • 服务器是否比客户端更频繁地启动和停止?你可以切换谁听/连接
+0

它是一种日志查看器,所以理想情况下它会尽快运行。我的愿望不是立即联系,也不必担心多久进行一次民意调查。 – arolson101 2009-12-11 05:11:21

0

考虑使用某种形式的Windows同步,例如信号量。客户端可以等待同步原语,服务器可以在启动时发出信号。

0

个人我会使用从服务器的UDP广播,并有“客户端”听它。服务器可以在运行时每X周期广播一个UDP数据包,当客户端获得一个时,如果它尚未连接,它可以连接。

这样做的好处是,您可以将客户端移动到不同的机器上,而不会有任何问题(并且由于从客户端到服务器的主要连接已经是套接字,因此将客户端和服务器绑定到同一台计算机因为您为初始引导选择了本地IPC方法)。

相关问题