ACE6.2.0下载HTTP服务器文件
#include "ace/Log_Msg.h" // ACE_DEBUG的宏定义在这里.
#include "ace/OS.h"
#include "ace/CDR_Stream.h"
#include "ace/INET_Addr.h"
#include "ace/SOCK_Connector.h"
#include "ace/SOCK_Stream.h"
#include "ace/streams.h"
#include "ace/Log_Record.h"
#include <iostream>
unsigned long CDownloader::directDownload()
{
// http://p3.img.cctvpic.com/fmspic/2013/07/19/62f0a17c7ac74c679d47da4bd9ce0c8e-180.jpg
std::string strDomain = "vod.cntv.lxdns.com";
std::string strPath = "/flash/mp4video29/TMS/2013/07/19/62f0a17c7ac74c679d47da4bd9ce0c8e_h264818000nero_aac32-2.mp4";
// 从URL转换为IP
hostent* he = NULL;
if ( (he = ACE_OS::gethostbyname(strDomain.c_str())) == NULL)
{
ACE_ERROR_RETURN( (LM_ERROR, "%p\n", "ACE_OS::gethostbyname"), ACE_OS::last_error());
}
// 构造sockaddr_in结构.
struct sockaddr_in addr;
addr.sin_family = AF_INET;
memcpy(&addr.sin_addr, he->h_addr_list[0], he->h_length);
assert(INADDR_NONE != addr.sin_addr.s_addr);
addr.sin_port= htons(80);
// 初始化ACE结构.
int result;
ACE_INET_Addr svr_addr;
result = svr_addr.set(&addr, sizeof(sockaddr_in));
if (-1 == result)
{
ACE_ERROR_RETURN( (LM_ERROR, "%p\n", "build ACE_INET_Addr"), ACE_OS::last_error());
}
// 连接
ACE_SOCK_Stream strm;
ACE_SOCK_Connector connector;
if (connector.connect(strm, svr_addr) < 0)
{
ACE_ERROR_RETURN( (LM_ERROR, "%p\n", "ACE_SOCK_Connector.connect"), ACE_OS::last_error());
}
// 发Request
static const char headMethod[] = "HEAD ";
static const char getMethod[] = "GET ";
static const char keepAlive[] = "Connection: keep-alive \r\n";
static const char prot[] = " HTTP/1.1\r\n";
static const char acc[] = "Accept: text/html, application/xhtml+xml, application/xml;q=0.9,image/webp,*/*;q=0.8\r\n";
static const char lang[] = "Accept-Language: zh-cn,zh;q=0.8\r\n";
static const char enc[] = "Accept-Encoding: gzip, deflate, sdch\r\n";
static const char browser[] = "User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) \r\n";
static const char host[] = "Host:";
static const char end[] = "\r\n\r\n";
std::string str = getMethod;
str += strPath.c_str();
str += prot;
str += acc;
str += lang;
str += enc;
str += browser;
str += host;
str += strDomain.c_str();
str += end;
ACE_OutputCDR request(const_cast<char*>(str.c_str()), str.size());
iovec iov[1];
iov[0].iov_base = request.begin()->rd_ptr();
iov[0].iov_len = str.size();
ssize_t sended = strm.sendv_n(iov, 1);
// 收Response
// 根据需要处理.这只是个示例.
const int bs = 1024*10;
ACE_Message_Block* payload = new ACE_Message_Block(bs/*ACE_DEFAULT_CDR_BUFFSIZE*/);
ACE_CDR::mb_align(payload);
ssize_t rec = strm.recv_n(payload->wr_ptr(), bs);
{
int i = ACE_OS::last_error();
payload->wr_ptr(bs);
char* p = payload->rd_ptr();
payload->release();
}
}
ACE6.2.0下载HTTP服务器文件的更多相关文章
- java使用sftp下载远程服务器文件
使用的是springboot的项目,只是贴出主要配置与类,代码较长,可以先折叠: 参考:https://www.cnblogs.com/xyzq/p/7049369.html 操作工具类SftpUti ...
- Linux下使用wget下载FTP服务器文件
wget -nH -m --ftp-user=your_username --ftp-password=your_password ftp://your_ftp_host/* 使用命令下载ftp上的文 ...
- Firefox下载.net服务器文件时中文乱码
ASP.NET中产生一个Excel报表,供浏览器下载.显然,下载时经常有汉字报表名称.针对当前的两个主流的浏览器IE和Firefox,似乎没有兼容的解决办法.网上搜索了一些解决方法,但在Firefox ...
- vc2005 编译ACE-6.2.0
vc2005 编译ACE-6.2.0 下载并解压ACE-6.2.0 ftp://download.dre.vanderbilt.edu/previous_versions/ACE-6.2.0.zip ...
- Android开发之下载Tomcat服务器的文件到模拟器的SD卡
Tomcat服务器可以到Apache的官网去下载http://tomcat.apache.org/,如何配置和使用百度下也有很多介绍,只要把Java的SDK配下java_home环境变量就行了,因为T ...
- Android使用Xutil3.0下载文件.md
Android使用Xutil3.0下载文件.md 新建项目: 引入依赖: implementation 'org.xutils:xutils:3.5.0' 添加权限: <uses-permiss ...
- 关于springmvc下服务器文件打包成zip格式下载功能
关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储 版权声明:本文为博主 ...
- php自定义函数: 下载本地服务器的大文件
// 使用方法 $file_path = './a.zip'; // 只能是本地服务器文件, 多大的文件都支持!! down_file($file_path); // 函数参数: 服务器文件路径,下载 ...
- paramiko模块的安装和使用(含上传本地文件或文件夹到服务器,以及下载服务器文件到本地)
安装和使用分两步介绍: 介绍一下,本文的运行环境是win7 64位 和python 2.7 . 安装: WIN7_64位 安装python-ssh访问模块(paramiko)的安装教程,本人亲测下面 ...
随机推荐
- 算法面试题 之 最长递增子序列 LIS
找出最长递增序列 O(NlogN)(不一定连续!) 参考 http://www.felix021.com/blog/read.php?1587%E5%8F%AF%E6%98%AF%E8%BF%9E%E ...
- 如何使用Palette提取Bitmap的颜色
5.X提出了color palette 的概念,能够让主题动态的去适应当前的页面色调,让整个app色调看起来比较和谐统一 那么如何使用Palette呢,必不可少,我们需要在Android studio ...
- 【基础】常用的机器学习&数据挖掘知识点
Basis(基础): MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Least Square Methods 最小二乘法),ML ...
- 12.04 如何更专业的使用Chrome开发者工具
顾名思义Chrome开发工具就是一个工具,它允许Web开发人员可以通过浏览器应用程序干预和操作Web页面,也可以通过这个工具调试和测试Web页面或Web应用程序.有了这个工具,你可以做很多有趣的事情: ...
- TerminateThread函数学习
终结一个线程. BOOL WINAPI TerminateThread( _Inout_ HANDLE hThread, _In_ DWORD dwExitCode ); Parameter ...
- django datetime format 日期格式化
django datetime format 日期格式化 www.jx-lab.com python 中 date,datetime,time对象都支持strftime(format)方法,但有一些区 ...
- JavaSE_ 多线程 总目录(23~24)
JavaSE学习总结第23天_多线程123.01 多线程程序的引入23.02 进程概述及多进程的意义23.03 线程概述及多线程的意义23.04 并行和并发的区别23.05 Java程序运行原理和JV ...
- BZOJ 1016: [JSOI2008]最小生成树计数( kruskal + dfs )
不同最小生成树中权值相同的边数量是一定的, 而且他们对连通性的贡献是一样的.对权值相同的边放在一起(至多10), 暴搜他们有多少种方案, 然后乘法原理. ----------------------- ...
- bind和live
<div> <ul> <li></li> <li></li> <li></li> <li>& ...
- ECharts-百度地图使用
Demo可以直接搜到 这里主要是拖js