1

我有我的 c++ 客户端应用程序和 Java 服务器。客户端应用程序连接并将数据发送到服务器。

例如我发送整数值:

boost::shared_ptr<TSocket> socket(new TSocket(hostMS, portMS));
    boost::shared_ptr<TFramedTransport> transport(new TFramedTransport(socket));
    boost::shared_ptr<TBinaryProtocol> protocol(new TBinaryProtocol(transport));

transport->open();
protocol->writeI32(0xCA12EEAA);
transport->writeEnd();
transport->flush();

服务器端代码为:

int nMagic =0;
// int nLen = in.readInt(); <------------here is I read the length
int ch1 = in.read();
                int ch2 = in.read();
                int ch3 = in.read();
                int ch4 = in.read();
                if ((ch1 | ch2 | ch3 | ch4) < 0)
                    throw new EOFException();
             nMagic = ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));

问题是:当我再添加一个读取整数(请参阅我的评论)时,它可以正常工作。首先,我读取长度(4 个字节),然后读取数据 - 整数。

表示客户端发送长度(int)数据(int)

但服务器只读取数据。

我怎样才能只发送数据?我可以使用另一个节俭的传输或协议或使用非节俭的库......

4

3 回答 3

3

更一般的说法是,客户端 Thrift 协议/传输堆栈必须与服务器端匹配,否则您很可能会遇到麻烦。

例如,如果服务器使用二进制协议、成帧和多路传输,客户端必须完全相同。

于 2013-08-29T20:33:48.907 回答
1

但是如果你使用非阻塞服务器,那么你必须使用 TFramededTransport

于 2014-11-16T15:00:59.403 回答
0

使用 TBufferedTransport 代替 TFramededTransport 因为 TFramedTransport 在缓冲区之前添加(!)长度。

于 2013-08-29T18:39:50.037 回答