我有我的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) data(int)
但服务器只读取数据。
我如何才能发送数据?我可以使用另一个节俭传输或协议或使用非节约库...
答案 0 :(得分:3)
更一般的说法是,客户端Thrift协议/传输堆栈必须与服务器端匹配,否则您很可能遇到麻烦。
E.g。如果服务器使用二进制协议,成帧和多路传输,则客户端必须完全相同。
答案 1 :(得分:1)
但是如果您使用非阻塞服务器,则必须使用TFramededTransport
答案 2 :(得分:0)
使用TBufferedTransport代替TFramededTransport,因为TFramedTransport在缓冲区之前添加(!)长度。