要求 :客户端(c++实现):问现在几点钟
服务器(c++实现):现在是…
1. 编写WhatTime.thrift
namespace cpp roctime
service TimeService {
i32 TellMeTime()
}
编译:thrift–gen cpp WhatTime.thrift
在gen-cpp目录下会有如下文件:
TimeService.cpp
TimeService.h
TimeService_server.skeleton.cpp
WhatTime_constants.cpp
WhatTime_constants.h
WhatTime_types.cpp
WhatTime_types.h
将server样例文件改名mv TimeService_server.skeleton.cppserver.cpp
2. 打开server.cpp,修改TellMeTime方法
// Thisautogenerated skeleton file illustrates how to build a server.
// Youshould copy it to another filename to avoid overwriting it.
#include"TimeService.h"
#include<protocol/TBinaryProtocol.h>
#include<server/TSimpleServer.h>
#include<transport/TServerSocket.h>
#include<transport/TBufferTransports.h>
usingnamespace ::apache::thrift;
usingnamespace ::apache::thrift::protocol;
usingnamespace ::apache::thrift::transport;
usingnamespace ::apache::thrift::server;
usingboost::shared_ptr;
usingnamespace ::roctime;
classTimeServiceHandler : virtual public TimeServiceIf {
public:
TimeServiceHandler() {
// Your initialization goes here
}
int32_t TellMeTime() {
// Your implementation goes here
time_t now_time = time(NULL);
return now_time;
}
};
intmain(int argc, char **argv) {
int port = 9090;
shared_ptr<TimeServiceHandler>handler(new TimeServiceHandler());
shared_ptr<TProcessor> processor(newTimeServiceProcessor(handler));
shared_ptr<TServerTransport>serverTransport(new TServerSocket(port));
shared_ptr<TTransportFactory>transportFactory(new TBufferedTransportFactory());
shared_ptr<TProtocolFactory>protocolFactory(new TBinaryProtocolFactory());
TSimpleServer server(processor,serverTransport, transportFactory, protocolFactory);
server.serve();
return 0;
}
对server编译连接
[root@jcddgen-cpp]# g++ -g -DHAVE_NETINET_IN_H -I. -I/usr/local/include/thrift-L/usr/local/lib/ -lthrift TimeService.cpp WhatTime_types.cppWhatTime_constants.cpp server.cpp -o server -pthread
3. 编写client.cpp文件
#include"TimeService.h"
#include<thrift/transport/TSocket.h>
#include<thrift/transport/TBufferTransports.h>
#include<thrift/protocol/TBinaryProtocol.h>
#include<iostream>
using namespace std;
using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;
using namespace roctime;
int main(int argc ,char *argv[]){
// 生成一个Socket连接到服务端
boost::shared_ptr<TSocket> socket(newTSocket("localhost", 9090));
// 对Socket通道加入缓冲功能
boost::shared_ptr<TTransport>transport(new TBufferedTransport(socket));
// 生成相应的二进制协议,这个要和服务端一致,不然会出现协议版本不对的错误
boost::shared_ptr<TProtocol>protocol(new TBinaryProtocol(transport));
time_t mytime = 0;
// 生成客户端的服务对象
TimeServiceClient client(protocol);
transport->open();
mytime = client.TellMeTime();
cout << "Now is " <<ctime(&mytime) << endl;
transport->close();
return 0;
}
对client编译链接
[root@jcddgen-cpp]# g++ -g -DHAVE_NETINET_IN_H -I. -I/usr/local/include/thrift-L/usr/local/lib/ -lthrift TimeService.cpp WhatTime_types.cppWhatTime_constants.cpp client.cpp -o client –pthread
4. 打开2个客户端:
可能还需如下操作:[root@jcdd gen-cpp]#whereis libthrift-0.8.0.so
libthrift-0.8.0:/usr/local/lib/libthrift-0.8.0.jar /usr/local/lib/libthrift-0.8.0.so
[root@jcdd gen-cpp]# ln -s/usr/local/lib/libthrift-0.8.0.so /usr/lib
[root@jcddgen-cpp]# ldconfig
[root@jcddgen-cpp]# ./server
[root@jcdd gen-cpp]# ./client
Now isFri Apr 18 16:02:48 2014