gpt4 book ai didi

C++ Thrift 客户端 : how to send buffer without length?

转载 作者:行者123 更新时间:2023-11-30 01:57:37 25 4
gpt4 key购买 nike

我有我的 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 个字节),然后读取数据 - 整数。

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

但服务器只读取数据。

如何只发送数据?我可以使用另一个 thrift 传输或协议(protocol)或使用非 thrift 库...

最佳答案

更笼统的说法是,客户端Thrift协议(protocol)/传输栈必须与服务器端匹配,否则很可能会遇到麻烦。

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

关于C++ Thrift 客户端 : how to send buffer without length?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18513849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com