gSoap传输二进制数据
最近使用gSoap传输二进制数据,遇到问题。gSoap不能一次传输二进制数据。所以使用分包传送。
struct xsd_DwgInfo
{
char m_pBuffer[];//分包大小
int m_nReadSize;//
bool m_bEof;//此次是否完全读取数据
}; int ns_GetDwgBinaryInfo(char* chMineID, int nPosition, struct xsd_DwgInfo& dwgInfo);
服务器端代码:
#include <fstream>
using std::ifstream; int ns_GetDwgBinaryInfo(struct soap*, char *chMineID, int nPosition, struct xsd_DwgInfo &dwgInfo)
{//分包传送二进制数据
ifstream file;
file.open("E:\\123.dwg", std::ios::in | std::ios::binary);
if(!file.is_open()) return SOAP_ERR; file.seekg(nPosition);//起始读取位置
file.read(dwgInfo.m_pBuffer, );//读取数据长度
dwgInfo.m_nReadSize = file.gcount();
dwgInfo.m_bEof = file.eof();//当前是否读取完毕
file.close(); return SOAP_OK;
}
客户端代码:
void CCClientWebServiceDemoDlg::OnBnClickedButton4()
{//分包传送
struct soap getInfoSoap;
soap_init(&getInfoSoap);
char* server_addr = "http://127.0.0.1:10000"; xsd_DwgInfo dwgInfo;
int nState = soap_call_ns_GetDwgBinaryInfo(&getInfoSoap, server_addr, "", "", , dwgInfo);
bool bEof(false);
if (getInfoSoap.error)
{
soap_print_fault(&getInfoSoap, stderr);
bEof = true;
}
ofstream file;
if(!bEof)
{
file.open(GetFilePath(_T("Circle.dwg")), std::ios::out | std::ios::binary | std::ios::trunc);
if(file.is_open())
file.write(dwgInfo.m_pBuffer, dwgInfo.m_nReadSize);
}
bEof = dwgInfo.m_bEof;
int nPosition = dwgInfo.m_nReadSize;
soap_end(&getInfoSoap);
soap_done(&getInfoSoap); while(!bEof)
{
soap_call_ns_GetDwgBinaryInfo(&getInfoSoap, server_addr, "", "", nPosition, dwgInfo);
if (getInfoSoap.error)
{
soap_print_fault(&getInfoSoap, stderr);
bEof = true;
}
else
{
if(file.is_open())
file.write(dwgInfo.m_pBuffer, dwgInfo.m_nReadSize);
bEof = dwgInfo.m_bEof;
nPosition += dwgInfo.m_nReadSize;
}
soap_end(&getInfoSoap);
soap_done(&getInfoSoap);
}
if(file.is_open()) file.close();//关闭文件
}
gSoap传输二进制数据的更多相关文章
- atitit.无损传输二进制数据串传输网络
atitit.无损传输二进制数据串传输网络 1. gbk的网络传输问题,为什么gbk不能使用来传输二进制数据 1 2. base64 2 3. iso-8859-1 (推荐) 2 4. utf-8 ...
- Linux企业级项目实践之网络爬虫(16)——使用base64传输二进制数据
用http传输二进制的数据时,需要将二进制做一下转化,例如传输的int类型,将int类型之间转为char以后,丢失掉了长度的信息,如数字123456,本来只有4个字节,但是转化成文本的"12 ...
- http协议传输二进制数据以及对输入流(php://input)和http请求的理解
1.index.php <?php $data=file_get_contents('./a.jpg'); $opts = array('http' => array( 'method' ...
- atitit.二进制数据无损转字符串网络传输
atitit.二进制数据无损转字符串网络传输 1. gbk的网络传输问题,为什么gbk不能使用来传输二进制数据 1 2. base64 2 3. iso-8859-1 (推荐) 2 4. utf-8 ...
- 前端H5中JS用FileReader对象读取blob对象二进制数据,文件传输
HTML5中的Blob对象只是二进制数据的容器,本身并不能操作二进制,故本篇将对其操作对象FileReader进行介绍. FileReader FileReader主要用于将文件内容读入内存,通过一系 ...
- 详细解读XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
本文主要参考:MDN 分析并操作 responseXML属性 如果你使用 XMLHttpRequest 来获得一个远程的 XML 文档的内容,responseXML 属性将会是一个由 XML 文档解析 ...
- JavaScript读二进制文件并用ajax传输二进制流
综合网上多个教程,加上自己实践得出的方法,目前能够兼容谷歌.IE11.IE10. htmlbody里的内容,没什么特殊的. <div id="dConfirm"> &l ...
- C++和python使用struct传输二进制数据结构来实现
网络编程问题往往涉及二进制数据的传输.在C++经常使用的传输是文本字符串和分组结构. 假设该数据可以预先送入连续的内存区域,然后让send函数来获得的第一个地址,这一块连续的内存区就能完成传输数据.文 ...
- Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)
目录 SignalR系列目录(注意,是ASP.NET的目录.不是Core的) 前言 一晃一个月又过去了,上个月有个比较大的项目要验收上线.所以忙的脚不沾地.现在终于可以忙里偷闲,写一篇关于Signal ...
随机推荐
- 基于TCP的一对回射客户/服务器程序及其运行过程分析( 下 )
执行分析 1. 打开服务器进程: 2. 执行netstat -a命令观察当前的连接状态: 第1条连接记录说明:绑定了本地主机的任意IP,端口为9877,目前处于监听状态. 3. 打开客户进程: 4. ...
- 对小程序的网络请求的封装 wx.request 接收参数修改
wepy-mall/wxRequest.js at master · dyq086/wepy-mall https://github.com/dyq086/wepy-mall/blob/master/ ...
- Windows消息、绘图与多线程
有一个项目,一旦点下按钮后,用死循环不停的读数据,读出后立刻用可视化的方法显示.如果不采用多线程的方法,程序运行都正确,但无法关闭窗口,不清楚是窗口无法通过关闭按钮来接受Windows消息,还是接受了 ...
- [SCOI2009] 最长距离
题目描述 windy有一块矩形土地,被分为 NM 块 11 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离. 如果从格子A不可以走到格子 ...
- MFC窗口消息PostMessage和SendMessage
以前这些消息用得比较少,但是今天碰到了个事儿,我看非用消息不可. 事情是这样的,我在线程中需要刷新对话框上面的内容,但是每每执行到UpdateData时就出现了断言错误. 查了相关资料,发现这个可能是 ...
- Eclipse jar打包详解
通过Eclipse下的演示工程,介绍如何打包这样的项目:要导出的类里边用到了别的jar包. 方法/步骤 1. Eclipse下的演示工程结构如下图所示,其中Task.java是当前工程运行的M ...
- ES6 对Math对象的扩展
Math 对象的扩展 Math.trunc() Math.trunc(4.1) // 4 Math.trunc(4.9) // 4 Math.trunc(-4.1) // -4 Math.trunc( ...
- BZOJ 1620 [Usaco2008 Nov]Time Management 时间管理:贪心
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1620 题意: 有n个工作,每一个工作完成需要花费的时间为tim[i],完成这项工作的截止日 ...
- 关于RHEL5中yum挂载iso源引起的问题(转)
今天在虚机上通过yum挂载iso源来安装rpm包,但提示错误,内容见下面.之前也有过这样的操作, mount后,修改repo文件,然后就可以yum install rpm包了:过程很简单啊.不知道这 ...
- SqlServer--学习触发器
触发器是一种特殊的存储过程,一种不能被显式执行,而必须依附于一个事件的过程 主要作用:自动化操作;减少手动操作以及出错的几率. 触发器分类:DML(Data Manipulation Language ...