我的问题专门处理未通过gSOAP中的RPC正确发送的二进制数据。我只限于将二进制文件存储为std :: string。在大多数情况下,只有一小部分预期的二进制数据通过线路发送。我相信这是因为gSOAP无法正确处理填充的std :: string中包含的某些字符。
我的gSOAP客户端应用程序需要向相应的gSOAP服务器应用程序发送几个不同的二进制文件,包括第三方应用程序的RPM。在xml到h和cpp转换过程之后,我被限制为自动生成的C ++接口。我正在提供以下课程。
programUpdate类看起来像这样:
class SOAP_CMAC _ns1__setProgramUpdate
{
public:
std::string programPatch;
struct soap *soap;
....
}
因此,我被限制为将二进制数据存储为std :: string。根据我的研究,似乎std :: strings能够处理所有类型的字符;在心弦只是一个字符的容器。
那么什么会导致通过gSOAP RPC通过网络发送数据来截断数据呢?
答案 0 :(得分:1)
XML,因此SOAP不允许任意二进制数据,如果没有对XML中非法的字符进行编码。要在gSOAP中完成您想要的任务,您需要查看gSOAP 2.8.17用户指南的第11.12节。它将帮助您设置二进制数据数组,然后gSOAP将在进入SOAP信封之前进行base64编码。还有通过十六进制编码处理二进制数据的规定;见第11.13节。
对于您的情况,类似于此的声明可能就足够了:
class xsd__base64Binary
{
public:
unsigned char *__ptr;
int __size;
};
class SOAP_CMAC _ns1__setProgramUpdate
{
public:
xsd__base64Binary programPatch;
struct soap *soap;
....
};