首先需要编译thrift的compiler
源代码目录在:
\thrift-master\compiler\cpp
原来是vs2010的功能,用vs2013打开之后会提示升级,因为这只是一个工具,所以不需要升级,直接编译得到需要的exe
编译之后得到一个thrift.exe,这个工具可以把中间代码生成对应的目标代码
生成需要的测试代码
在thrift.exe的目录中新建一个记事本,粘贴如下内容保存,之后把文件名改成student.thrift:
<span style="font-size:18px;">struct Student{ i32 sno, string sname, bool ssex, i16 sage, } service Serv{ void put(1: Student s), } </span>
在终端中输入以下命令:
<span style="font-size:18px;">thrift.exe -r --gen cpp student.thrift</span>
得到我们需要的文件夹gen-cpp,其中就是thrfit命令生成的代码
在解决方案thrift中新建一个Server工程
把文件夹gen-cpp拷贝过去,文件夹目录的构成如下:
在工程目录中引入gen-cpp中的.h和.cpp:
把上面红框中.cpp文件中的内容拷贝到Server.cpp中,然后移除,加入对应的.lib:
因为打算把Client发送的内容在Server一端中打印出来,所以在默认的ServHandler中修改对应的put方法内容为:
printf("sno=%d sname=%s ssex=%dsage=%d/n", s.sno, s.sname.c_str(), s.ssex, s.sage);
在工程中设置对应的头文件目录,可以参考我的:
gen-cpp;..\cpp\src;..\cpp\openssl-1.0.1e;D:\boost_1_57_0;
库目录:
D:\boost\boost_1_57_0\bin\vc12-x64\lib;
同样的再新建一个Client工程
同样的可以参考3,也需要去掉
把文件夹gen-cpp拷贝过去,在把\thrift-master\tutorial\cpp目录下的CppClient.cpp也拷贝过去
文件夹目录的构成如下:
工程目录如下:
在工程中直接删掉进行Serv_server.skeleton.cpp,对Clien.cpp加入如下代码:
#include <thrift/transport/TSocket.h> #include "Serv.h" #include <thrift/protocol/TBinaryProtocol.h> #include <thrift/server/TSimpleServer.h> #include <thrift/transport/TServerSocket.h> #include <thrift/transport/TBufferTransports.h> #include <string> using namespace ::apache::thrift; using namespace ::apache::thrift::protocol; using namespace ::apache::thrift::transport; using namespace ::apache::thrift::server; using boost::shared_ptr; #pragma comment(lib, "../lib/x64/libthrift.lib") #pragma comment(lib, "../lib/x64/libthriftnb.lib") #pragma comment(lib, "../lib/x64/libeay32.lib") #pragma comment(lib, "../lib/x64/ssleay32.lib") int main(int argc, char** argv) { int port = 9090; shared_ptr<TTransport> socket(new TSocket("127.0.0.1", 60010)); shared_ptr<TTransport> transport(new TBufferedTransport(socket)); shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport)); ServClient client(protocol); Student s; s.sno = 123; s.sname = " zengraoli"; s.ssex = 1; s.sage = 30; try{ transport->open(); client.put(s); transport->close(); } catch (TException& tx){ printf("ERROR:%s\n", tx.what()); } getchar(); return 0; }
在工程中设置对应的头文件目录,可以参考我的:
gen-cpp;..\src;..\cpp\openssl-1.0.1e;D:\boost_1_57_0;
库目录:
D:\boost\boost_1_57_0\bin\vc12-x64\lib;
开始测试
首先打开Server运行:
然后再打开Client,服务器的消息如下:
整个工程(含lib库、测试例子、libevent、openssl)下载地址
http://download.csdn.net/detail/zengraoli/9510383