gSOAP:RPC截断std::string中的二进制数据
gSOAP: RPC truncating binary data in std::string
我的问题专门处理在gSOAP中没有通过RPC正确发送二进制数据的问题。我被限制为将二进制文件存储为std::字符串。在大多数情况下,只有一小部分预期的二进制数据通过导线发送。我认为这是因为gSOAP无法正确处理填充的std::字符串中包含的某些字符。
我的gSOAP客户端应用程序需要向相应的gSOAP服务器应用程序发送一些不同的二进制文件,包括第三方应用程序的RPM。在xml到h和cpp的转换过程之后,我只能使用自动生成的C++接口。我提供下面的课程。
programUpdate类看起来像这样:
class SOAP_CMAC _ns1__setProgramUpdate
{
public:
std::string programPatch;
struct soap *soap;
....
}
因此,我被限制为将二进制数据存储为std::字符串。从我的研究来看,std::字符串似乎能够处理所有类型的字符;核心字符串只是一个字符容器。
那么,是什么原因导致通过gSOAP RPC通过有线发送数据来截断数据呢?
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;
....
};
相关文章:
- 如何从dicom文件中读取二进制数据
- 如何在Qt中从数据库中检索二进制数据?
- readsome() 适合在 Windows 上读取二进制数据吗?
- 如何使用 redis-plus-plus 存储二进制数据,就像我想存储结构一样?@for_stack?
- 将包含二进制数据的 QByteArray 传递到按值运行
- 如何在 c++ 中生成十六进制二进制数据的 sha256 哈希?
- 在处理网络、二进制数据和序列化时应使用流或容器
- 我能确定从文件中读取的 32 字节二进制数据等于 256 位吗?
- C++:如何通过 curl 调用使用 HTTP post 请求发送二进制数据(protobuf 数据)
- 使用二进制数据更新 PostgreSQL 表
- 使用二进制数据和无符号字符
- sd_journal_send发送二进制数据.如何使用日志检索数据?
- 从带有 std::ifstream::read() 的文件中读取 int 遍历 char * 二进制数据
- 将文本和二进制数据连接到一个文件中
- 二进制模式 + 格式化文本操作或文本模式 + 二进制数据操作 - 有意义吗?
- 将整数的二进制数据转换为浮点数
- 使用 CMake 在可执行文件中嵌入二进制数据
- 二进制数据作为命令行参数
- 如何访问文件的二进制数据?
- 返回二进制数据的通用方式,而无需原始指针