想做一个NT服务程序,做各种消息的中转,可是不知道客户端该如何调用服务程序

时间:2022-03-17 05:59:28
想做一个NT服务程序,做各种消息的中转(单一机器上各种进程间的消息中转),可是不知道客户端该如何调用服务程序

比如,客户端发送一条自定义消息,参数是一个自定义结构体,结构体内包含消息ID和其它需要的数据等等等等,服务端收到后将消息中转到所有客户端

客户端和服务端该如何通信?


实现"类似"MFC程序间的SendMessage 的功能

11 个解决方案

#1


RPC

#2


RPC是什么东西?

怎么调用啊,我实在没有办法,已经把服务做成Com服务了....


单机上用的东西,都是MFC的,郁闷死了

我得解决这个问题

help

#3


这就是你逻辑的问题,如果中转说简单点就是包发来发去的

#4


做成COM调用不是更简单么,直接用接口。

#5


MSMQ?

#6


COM 对象
IP 协议(参考)

客户端实现消息处理接口IReciever->接口实现函数OnMessage(struct msg)

启动客户端->创建COM对象->COM初始化,寻找已创建的对象,若无则新建对象->获取COM 通讯接口ISender

->接口实现SendMessage(struct msg)->调用SendMessage实现通讯->COM 询找指定进程

->COM 获取该进程IReciever接口->COM调用IReciever::OnMessage(struct msg)

->客户端自处理 msg 消息

#7


为何要中转?用共享内存或命名管道不好吗?

#8


RPC 就是标准的解决此问题的方法,如果楼主还不知道怎么做,那就需要系统地去学习一下了,大家在这里的讨论不太可能给你一个完整的解决方案的。

#9


用RPC做了

客户端可以调用服务端程序
服务端也可以回调C

但是有新问题:

按我的想法
C调用S的函数后,S要回调所有的C端

但是在IDL同一接口中加的callback函数,S端调用时不会调用到所有的C,只会调用当前的C

如何解决?

谢谢

#10


遇到新的问题

把服务端做成了NT Service
手动运行(双击SSService.exe )S端没问题,调用成功

但以服务方式运行,过约20秒服务自动退出了
20秒内,客户端初始化返回正常,但调用具体的S端函数时就异常了(提示服务器不可用)

望不吝赐教

#11


网上找一个CS结构的代码,把服务端写成WINDOWS服务不就可以了吗

#1


RPC

#2


RPC是什么东西?

怎么调用啊,我实在没有办法,已经把服务做成Com服务了....


单机上用的东西,都是MFC的,郁闷死了

我得解决这个问题

help

#3


这就是你逻辑的问题,如果中转说简单点就是包发来发去的

#4


做成COM调用不是更简单么,直接用接口。

#5


MSMQ?

#6


COM 对象
IP 协议(参考)

客户端实现消息处理接口IReciever->接口实现函数OnMessage(struct msg)

启动客户端->创建COM对象->COM初始化,寻找已创建的对象,若无则新建对象->获取COM 通讯接口ISender

->接口实现SendMessage(struct msg)->调用SendMessage实现通讯->COM 询找指定进程

->COM 获取该进程IReciever接口->COM调用IReciever::OnMessage(struct msg)

->客户端自处理 msg 消息

#7


为何要中转?用共享内存或命名管道不好吗?

#8


RPC 就是标准的解决此问题的方法,如果楼主还不知道怎么做,那就需要系统地去学习一下了,大家在这里的讨论不太可能给你一个完整的解决方案的。

#9


用RPC做了

客户端可以调用服务端程序
服务端也可以回调C

但是有新问题:

按我的想法
C调用S的函数后,S要回调所有的C端

但是在IDL同一接口中加的callback函数,S端调用时不会调用到所有的C,只会调用当前的C

如何解决?

谢谢

#10


遇到新的问题

把服务端做成了NT Service
手动运行(双击SSService.exe )S端没问题,调用成功

但以服务方式运行,过约20秒服务自动退出了
20秒内,客户端初始化返回正常,但调用具体的S端函数时就异常了(提示服务器不可用)

望不吝赐教

#11


网上找一个CS结构的代码,把服务端写成WINDOWS服务不就可以了吗