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

这意味着客户端发送
长度(整数)
数据(整数)

但是服务器仅读取数据。

我如何只能发送数据?我可以使用其他旧式传输或协议(protocol),也可以使用非旧式存储库...

最佳答案

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

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

关于c++ - C++ Thrift 客户端:如何发送没有长度的缓冲区?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18513849/

10-11 23:05
查看更多