代码之家  ›  专栏  ›  技术社区  ›  arolson101

有没有办法在win32上等待监听套接字?

  •  0
  • arolson101  · 技术社区  · 15 年前

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

    3 回复  |  直到 15 年前
        1
  •  1
  •   Brian R. Bondy    15 年前

    没有这样的win32 api,但是使用事件可以很容易地完成。客户机将等待该事件被发出信号。服务器将在事件启动时发出信号。

    您需要使用的相关API是 CreateEvent , OpenEvent , SetEvent , ResetEvent WaitForSingleObject .

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

    您可能确实有充分的理由需要这样做,但在实施之前,请考虑:

    • 你现在需要连接的原因是什么?我认为这是一个没有问题的问题,因为如果您在客户机中执行一个操作,您可以在那时建立一个新的服务器连接。
    • 服务器的启动和停止频率是否比客户端高?您可以切换监听/连接者的角色
        2
  •  0
  •   jdigital    15 年前

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

        3
  •  0
  •   Len Holgate    15 年前

    我个人会使用来自服务器的UDP广播,让“客户机”监听它。服务器可以在运行时每隔X段广播一个UDP数据包,当客户端收到一个数据包时,如果尚未连接,则可以连接。

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