节俭编程问题

时间:2011-05-20 05:26:04

标签: sockets thrift

喜 我刚开始用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()失败:连接被拒绝   中止

现在我不明白我做错了什么? 谁能解释我节俭工作? 如何正确运行此代码? 这段代码在做什么?

1 个答案:

答案 0 :(得分:1)

你的Thrift服务器也在运行吗?客户端需要连接的东西。错误看起来在端口9090上没有打开套接字(在代码中设置)。