thrift-0.9.3 编译依赖第三方库 boost_1_53_0、OPENSSL
VS2008 编译thrift 上一篇文章已经介绍过,这里不再介绍,简单举例说明如何使用
IDL 文件 student.thrift
struct Student{
1: i32 sno,
2: string sname,
3: bool ssex,
4: i16 sage,
}
service Serv{
void put(1: Student s),
}
使用如下命令生成相关代码
thrift-0.9.3.exe -r --gen cpp D:\TEST\demoThrift\student.thrift
如下图所示:
这些都是服务端 代码,添加工程即可编译。
由于thrift 依赖 OPENSSL 故需要引入库
#pragma comment (lib, "ssleay32.lib")
#pragma comment(lib, "libeay32.lib")
还需要引入thrift的静态库
#pragma comment (lib, "libthrift.lib")
还有BOOST的相关库。
同理,客户端也需要引入这些库。
服务端代码
生成的就是服务端代码,引用即可,主函数在 Serv_server.skeleton.cpp 文件里。
客户端代码
#include <iostream>
#include"../gen-cpp/Serv.h"
#include <transport/TSocket.h>
#include <transport/TBufferTransports.h>
#include <protocol/TBinaryProtocol.h>
using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;
using boost::shared_ptr;
using namespace std;
#pragma comment (lib, "libthrift.lib")
#pragma comment (lib, "ssleay32.lib")
#pragma comment(lib, "libeay32.lib")
//#pragma comment (lib, "libthriftnb.lib")
int main()
{
boost::shared_ptr<TSocket> socket(new TSocket("localhost", 9090));
//对接nonblockingServer时必须的,对普通server端时用boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
//boost::shared_ptr<TTransport> transport(new TFramedTransport(socket));
boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
ServClient client(protocol);
//设置发送、接收、连接超时
socket->setConnTimeout(2000);
socket->setRecvTimeout(2000);
socket->setSendTimeout(2000);
transport->open();
//insert your code here
Student stu;
stu.sno = 1;
stu.sname = "lz";
stu.ssex = 0;
stu.sage = 25;
client.put(stu);
transport->close();
cout<<"send success!\n";
return 0;
}
编译报错,需要引用 两个CPP文件 Serv.cpp、 student_types.cpp
如果调试运行,报 无法定位序数350于动态链接库 时,需要在EXE的同级目录下 添加OPENSSL 的DLL文件 ,如图
具体见云盘
http://pan.baidu.com/s/1qYzqTWw