C++;thrift客户端:如何发送无长度的缓冲区? 我有我的C++客户端应用程序和java服务器。 客户端应用程序连接并向服务器发送数据

C++;thrift客户端:如何发送无长度的缓冲区? 我有我的C++客户端应用程序和java服务器。 客户端应用程序连接并向服务器发送数据,c++,thrift,thrift-protocol,C++,Thrift,Thrift Protocol,例如,我发送整数值: boost::shared_ptr<TSocket> socket(new TSocket(hostMS, portMS)); boost::shared_ptr<TFramedTransport> transport(new TFramedTransport(socket)); boost::shared_ptr<TBinaryProtocol> protocol(new TBinaryProtocol(transpor

例如,我发送整数值:

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();
boost::共享的ptr套接字(新的TSocket(hostMS,portMS));
boost::共享ptr传输(新的TFramedTransport(socket));
boost::共享ptr协议(新的TBinaryProtocol(传输));
传输->打开();
协议->写入32(0xCA12EEAA);
传输->写入();
运输->冲洗();
服务器端代码为:

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));
int-nMagic=0;

//int nLen=in.readInt() 使用TBufferedTransport而不是TFramedTransport,因为TFramedTransport在缓冲区之前添加了(!)长度。

使用TBufferedTransport而不是TFramedTransport,因为TFramedTransport在缓冲区之前添加了(!)长度。

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


例如,如果服务器使用二进制协议、帧传输和多路传输,则客户端必须执行完全相同的操作

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


例如,如果服务器使用二进制协议、帧传输和多路传输,则客户端必须执行完全相同的操作

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

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

如果没有长度属性,另一方如何知道要读取多少数据?嗯。。但这是事实。服务器不读取它。可能以前在基本Java类中读过。我做了另一个实验:运行套接字测试实用程序Hercules(www.hw-group.com)并连接到服务器,然后发送十六进制值-服务器成功接收到它。如果没有长度属性,另一方如何知道要读取多少数据?嗯。。但这是事实。服务器不读取它。可能以前在基本Java类中读过。我做了另一个实验:运行套接字测试实用程序Hercules(www.hw-group.com)并连接到服务器,然后发送十六进制值-服务器成功接收到它。看起来很有趣。我想这适用于所有节约平台(python、node)。你是怎么想到这个问题的?或者你为什么需要答案?看起来很有趣。我想这适用于所有节约平台(python、node)。你是怎么想到这个问题的?或者你为什么需要答案?