比如,客户端发送一条自定义消息,参数是一个自定义结构体,结构体内包含消息ID和其它需要的数据等等等等,服务端收到后将消息中转到所有客户端
客户端和服务端该如何通信?
实现"类似"MFC程序间的SendMessage 的功能
11 个解决方案
#1
RPC
#2
RPC是什么东西?
怎么调用啊,我实在没有办法,已经把服务做成Com服务了....
单机上用的东西,都是MFC的,郁闷死了
我得解决这个问题
help
怎么调用啊,我实在没有办法,已经把服务做成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 消息
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
如何解决?
谢谢
客户端可以调用服务端程序
服务端也可以回调C
但是有新问题:
按我的想法
C调用S的函数后,S要回调所有的C端
但是在IDL同一接口中加的callback函数,S端调用时不会调用到所有的C,只会调用当前的C
如何解决?
谢谢
#10
遇到新的问题
把服务端做成了NT Service
手动运行(双击SSService.exe )S端没问题,调用成功
但以服务方式运行,过约20秒服务自动退出了
20秒内,客户端初始化返回正常,但调用具体的S端函数时就异常了(提示服务器不可用)
望不吝赐教
把服务端做成了NT Service
手动运行(双击SSService.exe )S端没问题,调用成功
但以服务方式运行,过约20秒服务自动退出了
20秒内,客户端初始化返回正常,但调用具体的S端函数时就异常了(提示服务器不可用)
望不吝赐教
#11
网上找一个CS结构的代码,把服务端写成WINDOWS服务不就可以了吗
#1
RPC
#2
RPC是什么东西?
怎么调用啊,我实在没有办法,已经把服务做成Com服务了....
单机上用的东西,都是MFC的,郁闷死了
我得解决这个问题
help
怎么调用啊,我实在没有办法,已经把服务做成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 消息
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
如何解决?
谢谢
客户端可以调用服务端程序
服务端也可以回调C
但是有新问题:
按我的想法
C调用S的函数后,S要回调所有的C端
但是在IDL同一接口中加的callback函数,S端调用时不会调用到所有的C,只会调用当前的C
如何解决?
谢谢
#10
遇到新的问题
把服务端做成了NT Service
手动运行(双击SSService.exe )S端没问题,调用成功
但以服务方式运行,过约20秒服务自动退出了
20秒内,客户端初始化返回正常,但调用具体的S端函数时就异常了(提示服务器不可用)
望不吝赐教
把服务端做成了NT Service
手动运行(双击SSService.exe )S端没问题,调用成功
但以服务方式运行,过约20秒服务自动退出了
20秒内,客户端初始化返回正常,但调用具体的S端函数时就异常了(提示服务器不可用)
望不吝赐教
#11
网上找一个CS结构的代码,把服务端写成WINDOWS服务不就可以了吗