喜 我刚开始用thrift api编程。我运行示例代码,但我不知道如何运行thrift程序。我刚刚做了以下事情:
代码;
{#!/usr/local/bin/thrift --gen cpp
namespace cpp Test
service Something {
i32 ping()
}
比运行命令 thrift --gen cpp your_thrift_file.thrift
它在文件夹名gen-cpp中生成七个文件,其中包括:
Something.cpp
Something.h
Something_server.skeleton.cpp
your_thrift_file_constants.cpp
your_thrift_file_constants.h
your_thrift_file_types.cpp
your_thrift_file_types.h
现在我将它们全部编译在一起,通过以下命令
获得可执行文件g++ -Wall -I/usr/local/include/thrift -c Something.cpp -o something.o
g++ -Wall -I/usr/local/include/thrift -c Something_server.cpp -o server.o
g++ -Wall -I/usr/local/include/thrift -c your_thrift_file_constants.cpp -o constants.o
g++ -Wall -I/usr/local/include/thrift -c your_thrift_file_types.cpp -o types.o
比我写下一个跟随
的客户端代码{ #include "Something.h" // As an example
#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 namespace Test;
int main(int argc, char **argv) {
boost::shared_ptr<TSocket> socket(new TSocket("localhost", 9090));
boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
SomethingClient client(protocol);
transport->open();
client.ping();
transport->close();
return 0;
}
现在比我用命令
编译它g ++ -Wall -I / usr / local / include / thrift -c something_client.cpp -o client.o
并通过以下命令
制作可执行文件g ++ -L / usr / local / lib -lthrift client.o Something.o constants.o types.o -o Something_client
但是当我运行它时会显示以下错误
命令:./ Somem_client 结果:节俭:2011年5月20日星期五10:49:17 TSocket :: open()connect()拒绝连接 在抛出'apache :: thrift :: transport :: TTransportException'的实例后终止调用 what():connect()失败:连接被拒绝 中止
现在我不明白我做错了什么? 谁能解释我节俭工作? 如何正确运行此代码? 这段代码在做什么?
答案 0 :(得分:1)
你的Thrift服务器也在运行吗?客户端需要连接的东西。错误看起来在端口9090上没有打开套接字(在代码中设置)。