赞
踩
|
|
|
当客户端代理类的实例初始化时它调用服务端对象的 clone 方法,clone 方法创建一个服务端对象的新实例,并把新实例的指针保存在一个 std::map 中,用新实例的对象标识做 std::map 中的 key ,把这个对象标识返回给客户端,然后客户端就可以用这个对象标识调用服务端对象了,这时服务端对象和客户端代理是一对一服务,所以服务端对象可以保存打开的文件对象,文件读取指针等中间信息。当客户端代理不再需要服务时它调用服务端对象的 erase 方法, erase 方法先清除服务端对象在 std::map 中的信息,然后从内存中清除这个对象。我在这个程序中演示了远程文件读取和移动读取指针。如果服务端对象不需要保存中间信息,那么只要有一个实例就行了,客户端的代理用同一个标识调用它。我在演示程序中演示了这种情况,调用一个远程对象做整数的加减法。
我是在我的 win2k/mingw 环境下编译测试这个程序的,程序需要用到 gtkmm 库,在这个程序中我没有处理网络字节顺序问题, 实用的程序应该处理这个问题。
mingw 下编译命令是:
服务端程序:g++ -o gmrcmwser gmrcmwser.cc `pkg-config.exe gtkmm-2.4 --cflags --libs` -lgthread-2.0 -lws2_32
客户端程序:g++ -o gmrcmwcli gmrcmwcli.cc `pkg-config.exe gtkmm-2.4 --cflags --libs` -lgthread-2.0 -lws2_32
这个程序源码可以移植到 Linux , Linux 下编译命令是:
服务端程序:g++ -o gmrcmwser gmrcmwser.cc `pkg-config gtkmm-2.4 --cflags --libs` -lgthread-2.0
客户端程序:g++ -o gmrcmwcli gmrcmwcli.cc `pkg-config gtkmm-2.4 --cflags --libs` -lgthread-2.0
zhujiang
2007年3月24日
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。