gSOAP:RPC截断std :: string中的二进制数据

时间:2013-12-11 19:36:55

标签: c++ stl gsoap

我的问题专门处理未通过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通过网络发送数据来截断数据呢?

1 个答案:

答案 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;
    ....
};