有没有办法等待win32上的侦听套接字?

时间:2009-12-10 23:04:51

标签: sockets winapi

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

3 个答案:

答案 0 :(得分:1)

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

您需要使用的相关API包括CreateEventOpenEventSetEventResetEventWaitForSingleObject

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

你可能有充分的理由需要这个,但在你实现之前请考虑:

  • 你有什么理由需要马上连接吗?我认为这是一个非问题,因为如果您在客户端中执行操作,则可以在此时建立新的服务器连接。
  • 服务器是否比客户端更频繁地启动和停止?您可以切换谁监听/连接的角色

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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