Gsoap 使用心得 2
Gsoap 返回图片byte的困惑
前些日子刚使用gsoap将二进制文件上传(服务期端使用c# wcf 编写),上传功能实现没有问题.
这几天又要接收从服务器端接收图片的byte数据.困惑了好几天,最终在Bill wang的帮助下解决问题.
总结以下,但愿能对有同样遭遇的兄弟有所帮助.
1、返回byte数据
c++调用代码如下:
struct _ns1__USCOREGetPicture getPicture;
struct _ns1__USCOREGetPictureResponse getPictureR; xsd__base64Binary *image; getPicture.pictureName="1.png";
getPicture.soap=&clientSOAP; pgcFile.soap_endpoint=strurlpath.c_str(); int soapResultTest=pgcFile.USCOREGetPicture(&getPicture,&getPictureR);
image=getPictureR.USCOREGetPictureResult; FILE *fp_binary = fopen("C:\\2.jpg", "wb");
fwrite(image->__ptr, , image->__size, fp_binary);
fclose (fp_binary);
//直接存成文件没有问题,问题得到解决
1.1 出现问题:
困惑的地方:image->__ptr=" j"只有这些数据, 而image->__size=1987256 正确没有问题.
1.2 处理问题过程:
当时候一看到image->__ptr值后,困惑,就直接考虑返回的图片的其他数据都到那去了(走了弯路)开始怀疑是c#服务端的问题,找了抓包工具,把soap包抓下来分析下,服务器端传过来的数据没有问题,是正确的。 (后来经过Bill wang的帮助,其实不用包抓那么麻烦,stdsoap2.h:819 取消注释即可,生成debug 日志文件)调试到当soap中的base64数据被反base64时,所有数据都被反编码成byte,存储到了char * soap->labbuf 中。数据image->__ptr=" j",非常困惑,为什么所有编码都成功了,数据还是他image->__ptr=" j"。
1.3 结论:(不一定正确,请高手指点)
由于图片二进制数据,所以会有单byte为00的编码,char * 字符串遇到 00 标记为字符串结束,所以显示image->__ptr=" j"。而实际字符串已经全部转码,存储到了物理的实际位置。所以使用编码首地址+实际长度,可以取到正确数据。而不能直接取image->__ptr的数据。
2、剩余困惑
gsoap中soap->buf存放soap数据,而他的大小默认65535,但是我2w的图片数据传输正确?
请高手指点!!
在此感谢Bill wang的帮助。
Gsoap 使用心得 2的更多相关文章
- [转贴]gsoap使用心得!
最近换了个工作环境,现在在大望路这边上班,呵,刚上班接到的任务就是熟悉gsoap!废话少说,现在开始gSoap学习! gSOAP是一个夸平台的,用于开发Web Service服务端和客户端的工具,在W ...
- gsoap 学习 1-如何使用
新年伊始,想把onvif和gsoap boa这三个东西学习下,并作下笔记,当然为了省时间,我昨天下午看了一个下午的gsaop官网pdf感触良多,也做了小测试,废话少说,一下也有一些是摘自网友博客,大部 ...
- gSOAP 使用WebServer心得
关于正常怎么使用gSOAP的话,下面那篇博客已经讲得非常详细,我就不再赘述了 https://www.cnblogs.com/dengpeng1004/p/6165751.html 问题1: WCF ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- NoSql数据库使用半年后在设计上面的一些心得
NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...
- 我的MYSQL学习心得(二) 数据类型宽度
我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(三) 查看字段长度
我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(四) 数据类型
我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(五) 运算符
我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
随机推荐
- iPhone 6 为何坚持1GB内存?
原文地址:http://digi.ifeng.com/expert/special/96/#6467378-qzone-1-9015-46cf52f061fd6e814686a918cedcb024 ...
- 在头文件声明全局变量和创建extern
在头文件声明全局变量和创建extern 问题: 是否有简单的方法,在头文件里定义我的变量,同时也为它们创建extern定义? 回答: 是的.尽管这不是必需的,使用正确的宏和一个头文件还是很容易实现的. ...
- 关于android 双击事件
大家好,关于android双击事件 我相信大家都知道 API中是有个方法的,但是必须在Activity中在能使用. 对于到底用不用android 双击事件API各有各的看法. 在Activity中使用 ...
- dos下遍历目录和文件的代码(主要利用for命令)
对指定路径指定文件进行遍历的程序,这里有多个批处理代码,但运行好像有些问题,大家可以根据需要选择 ===== 文件夹结构 ======================================= ...
- WinSock网络编程基础(2)客户端
接下来说一下如何用WinSock创建基于TCP/IP模型的客户端和服务器. TCP可以提供两个计算机间可靠无误的数据传输,应用程序使用TCP通信时,会在两台计算机之间建立一个虚拟连接,连接之后计算机之 ...
- pprint模块解析
pprint模块提供了打印任意python数据结构的方法,如果这个数据结构不是python的基本类型,则可能无法打印结果. pprint模块定义了一个类: pprint ...
- 创建android 模拟器并在cmd中打开
因为在运行monkeyrunner之前必须先运行相应的模拟器或连接真机,否则monkeyrunner无法连接到设备,运行模拟器有两种方法:1.通过eclipse中执行模拟器 2.在CMD中通过命令调用 ...
- [LeetCode]题解(python):121-Best Time to Buy and Sell Stock
题目来源: https://leetcode.com/problems/best-time-to-buy-and-sell-stock/ 题意分析: 给定一个数组,代表array[i] 代表第i天的价 ...
- Round B APAC Test 2017
https://code.google.com/codejam/contest/5254487 A. Sherlock and Parentheses Problem Sherlock and Wat ...
- C#使用Windows API 隐藏/显示 任务栏 (FindWindowEx, ShowWindow)
原文 C#使用Windows API 隐藏/显示 任务栏 (FindWindowEx, ShowWindow) 今天,有网友询问,如何显示和隐藏任务栏? 我这里,发布一下使用Windows API 显 ...