基于g_soap制作的数据下载器,传输速度只有600kb 需改进

服务端:

//结构体
class ns_DownInfo
{
	char m_pBuffer[1024];
	int m_nReadSize;
	bool m_bEof;
};

struct ns_getDownInfoResponse {ns_DownInfo return_;};

int ns__DownFile(char *pcFileName, int nPosition, struct ns_getDownInfoResponse &r);

int ns__GetHelloWorld(char * &GetHelloWorldReturn);  //注册

//server.h
/********************************
 author: DuanYueming
 Creat: 2014/7/19
 Creat: 2014:17:52 

 purpose:发送文件模块
*******************************/

  #include "FileInfo.h"
#include "ns.nsmap"
//#include <fstream>
//
//
//
//class Server
//{
//public:
//	Server::Server(int _port=5678);
//	~Server();
//	int ns__SendFile(struct soap*, char *FileName, int Position, struct ns_GetFileInfo  &s);
//	/*char *GetFileName(char *_FilePath);*/
//	void InitSoap();
//
//
//private:
//	int m_TotalSize;
//	char *m_FileName;
//	bool m_state;
//	int  m_port;
//	int m_UpdataSize;
//	struct ns__SendFile *m_SendFile;
//	struct soap m_soap;
//};

//server.cpp

// #include "Server.h"
// using std::ifstream;
// Server::Server(int _port)
// {
// 	m_TotalSize=0;
// 	m_FileName=NULL;
// 	m_state=false;
// 	m_port=_port;
// 	m_UpdataSize=0;
// }
//
// //char* Server::GetFileName(char *_FilePath)
// //{
// //   m_FileName=_FilePath;
// // /*  return _FilePath;*/
// //}
//
//
// void Server::InitSoap()
// {
// 	 soap_init(&m_soap);
// 	 SOCKET _state = soap_bind(&m_soap,NULL,m_port,100);
// 	 if (_state == INVALID_SOCKET)
// 	 {
// 		 printf("The Socket Bind Error!");
// 			 exit(1);
// 	 }
// 	 printf("Socket Successful");
// 	 for (;;)
// 	 {
// 		 int _accept_state = (int)soap_accept(&m_soap);
// 		 if (_accept_state < 0)
// 		 {
// 			 soap_print_fault(&m_soap, stderr);
// 			 exit(-1);
// 		 }
// 		 printf("Connect Successful");
// 		 soap_serve(&m_soap);
// 		 soap_end(&m_soap);
// 	 }
//
// }
// int Server::ns__SendFile(struct soap*, char *FileName, int Position, struct ns_GetFileInfo &s)
// {
//
// 	ifstream _file;
//
// 	_file.open(FileName,std::ios::in | std::ios::binary);
// 	if (_file.is_open())
// 	{
// 		_file.seekg(Position);
// 		m_TotalSize = _file.tellg();
// 		while (!_file.eof())
// 		{
//  			_file.read(s.m_FileInfo.m_FileBuff,1024);
//  			m_UpdataSize += _file.gcount();
//  			printf("Sending %02d%%",(m_UpdataSize-m_TotalSize)*100);
// 			fflush(stdout);
// 			printf("\r");
//
// 		}
// 		_file.close();
//
// 	}
// 	return 0;
// }
// 

//inline ns_FileInfo * soap_new_req_ns_FileInfo(struct soap *soap, char m_FileBuff[1024], int m_TotalSize, bool m_state)
//{
//	ns_FileInfo *_p = soap_instantiate_ns_FileInfo(soap, -1, NULL, NULL, NULL);
//if (_p)
//{
//	_p->soap_default(soap);
//    _p->ns_FileInfo::m_FileBuff = m_FileBuff;
//    _p->ns_FileInfo::m_TotalSize = m_TotalSize;
//    _p->ns_FileInfo::m_state = m_state;
//}
//   return _p;
//}

  

//客户端

#include "soapStub.h"
#include "ns.nsmap"
#include <fstream>
using std::ofstream;
using std::ifstream;

int GetHelloWorld(const char* server)
{
	struct soap str_soap;
	int nResult = 0;
	soap_init(&str_soap);
	char* buff;// = new char[1024];
	soap_call_ns__GetHelloWorld(&str_soap, server, "", buff);
	if (str_soap.error)
	{
		soap_print_fault(&str_soap, stderr);
	}
	soap_end(&str_soap);
	soap_done(&str_soap);
	return 0;
}

int DownFile(const char* server)
{
	//从服务器读取pSourceFileName文件另存为pOldFileName文件
	char *pSourceFileName = "D:\\shrike-i386-disc1.iso", *pOldFileName = "E:\\444.txt";
	struct soap str_soap;
	int nResult = 0;
	soap_init(&str_soap);
	struct ns_getDownInfoResponse rResponse;
	soap_call_ns__DownFile(&str_soap, server, "", pSourceFileName, 0, rResponse);
	bool bEof(false);
	if (str_soap.error)
	{
		soap_print_fault(&str_soap, stderr);
		bEof = true;
	}
	ofstream file;
	if(!bEof)
	{
		file.open(pOldFileName, std::ios::out | std::ios::binary | std::ios::trunc);
		if(file.is_open())
			file.write(rResponse.return_.m_pBuffer, rResponse.return_.m_nReadSize);
	}
	bEof = rResponse.return_.m_bEof;
	int nPosition = rResponse.return_.m_nReadSize;
	soap_end(&str_soap);
	soap_done(&str_soap);

	while(!bEof)
	{
		soap_call_ns__DownFile(&str_soap, server, "", pSourceFileName, nPosition, rResponse);
		if (str_soap.error)
		{
			soap_print_fault(&str_soap, stderr);
			bEof = true;
		}
		else
		{
			if(file.is_open())
				file.write(rResponse.return_.m_pBuffer, rResponse.return_.m_nReadSize);
			bEof = rResponse.return_.m_bEof;
			nPosition += rResponse.return_.m_nReadSize;
		}
		soap_end(&str_soap);
		soap_done(&str_soap);
	}
	if(file.is_open())
		file.close();
	return 0;
}

int main(int argc, char * argv[])
{
	char *server = "http://localhost:8080";
	GetHelloWorld(server);
	DownFile(server);
	return 0;
}

  代码比较残缺,从坏了的硬盘弄出来的。。。当然,还是能做个例子的,具体的就不介绍了,相信有过一定编程经验的都能轻松看懂。

时间: 2024-08-25 03:04:19

基于g_soap制作的数据下载器,传输速度只有600kb 需改进的相关文章

基于SG2D制作的项目资源管理器

假期使用SG2D制作了一个开发辅助工具——“项目资源管理器”支持Windows和MacOSX,下面是其3个主要功能: 1.添加键值对表.支持添加文本,URL和其他类型的键值对.文本键值对兼容Android项目,导入Android项目后便可通过R类常量来获取字符串. 2.生成项目依赖资源文件的索引,指定资源目录和资源搜索起始目录(资源目录必须是资源搜索起始目录的子孙目录)并勾选生成资源索引复选框,便会将资源索引信息保存在资源目录下的resources.xml文件中. 3.同步各平台项目之间依赖的资

多线程下载器(不含数据库部分)

多线程下载器(不含数据库部分) 1.写在前面: 虽然demo中程序框架已搭建完成,但是由于笔者时间原因,暂时只完成了核心部分:多线程下载的部分,其他数据库.服务通知.暂停部分还未添加到项目中. 2.相关知识点: (1)Java线程及停止线程的方式 (2)Java RandomAccessFile文件操作 (3)HttpURLConnection相关range字段的配置 (4)Sqlite同步操作 2.核心思想: (1)通过HttpURLConnection判断服务器是否支持断电续传: <1>否

C#从基于FTPS的FTP server下载数据 (FtpWebRequest 的使用)SSL 加密

FTPS,亦或是FTPES, 是FTP协议的一种扩展,用于对TLS和SSL协议的支持. 本文讲述了如何从一个基于FTPS的Server中下载数据的实例. 任何地方,如有纰漏,欢迎诸位道友指教. 话不多,上码. 1 using System; 2 using System.Net; 3 using System.IO; 4 using System.Net.Security; 5 using System.Security.Cryptography.X509Certificates; 6 7 na

基于MFC的Media Player播放器的制作(3---功能实现)

|   版权声明:本文为博主原创文章,未经博主允许不得转载. 下面我们试试一下,按下退出Button退出播放器的功能: 首先,我们双击退出Button按钮,就会弹出下图的框: 上面的弄好之后我们就实现退出函数的功能: 这个代码写好之后,我们可以运行一下,在单击退出按钮,可以发现,按下之后我 们的播放器自动退出 下面我们在实现打开文件的功能,这个功能比较复杂,第一步我们首先双击打开文件按钮,在CPandaPlayerDlg.cpp中创建函 数OnOpenfile():创建过程同上. 可以看到函数:

bigemap地图下载器安装

软件下载 本产品支持主流winodws操作系统(xp sp3,vista,windows 7,windows 8及windows 10), 可通过访问大地图官网(http://www.bigemap.com/)获取本产品,用户可根据需求下载相应的版本. 如下图所示为软件下载. 本产品所有版本都具备在线自动升级,以保证用户实时获取到最新的地图数据和增值软件服务. 软件下载 下载完成后,双击安装包按照安装向导即可完成安装.温馨提示:请尽量不要把软件装在系统盘,如:C盘. 安装过程如下所示:     

那些年,我们用过的地图下载器

作为地信.遥感.地质.测绘等专业的同学,下载电子地图.遥感影像应该都接触过,现在XX地图下载器广告满天飞,虽然各位同学唯唯诺诺,还是被群主踢出了.现在把自己那些年珍藏的地图下载器分享给大家.对各种下载器的功能.精度等不作评价,感谢各位开发者和破解者. 请不要因为版权问题给我发邮件,本来这些截图软件的开发者已经侵犯了地图服务商的权益,单方面地做一个免责声明是无济于事的. 全能电子地图下载器 版本:1.9.5 官网:http://www.cnblogs.com/i-gps/ 简介:全能电子地图下载器

最简单的基于DirectShow的示例:视频播放器自定义版

本文记录一个简单的基于DirectShow的自定义的视频播放器.这里所说的"自定义播放器",实际上指的是自己在Filter Graph中手动逐个添加Filter,并且连接这些Filter的后运行的播放器.这么做相对于使用RenderFile()这种"智能"创建Filter Graph的方法来说要复杂不少,但是可以让我们更加了解DirectShow的体系. 流程图 最简单的基于DirectShow的自定义的视频播放器的流程如下图所示. 该流程图中包含如下变量: IGr

安卓实训第四天--基于HttpClient来完成数据在服务器和设备间的交互。

上午:老师首先回顾了昨天作业. 首先在安卓工程中的TOOLS文件中,解析字节流那里,不用改变,而是把服务器端的编码方式变为UTF-8,然后将在安卓工程的LoginActivity类中的USERNAME给他强制转换下. 总结一句话:如果一个字符通过某个编码转换成字节码之后,那你在转换的时候必须拿到转换之前的字节码 补充:如何改变mysql连接工具的编码方式: jdbc:mysql://localhost:3306/databasename?useUnicode=true&characterEnco

python爬虫实战——5分钟做个图片自动下载器

python爬虫实战--图片自动下载器 制作爬虫的基本步骤 顺便通过这个小例子,可以掌握一些有关制作爬虫的基本的步骤. 一般来说,制作一个爬虫需要分以下几个步骤: 分析需求(对,需求分析非常重要,不要告诉我你老师没教你) 分析网页源代码,配合F12(没有F12那么乱的网页源代码,你想看死我?) 编写正则表达式或者XPath表达式(就是前面说的那个神器) 正式编写python爬虫代码 效果 运行: 恩,让我输入关键词,让我想想,输入什么好呢?好像有点暴露爱好了. 回车 好像开始下载了!好赞!,我看