#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服务器文件的更多相关文章

  1. java使用sftp下载远程服务器文件

    使用的是springboot的项目,只是贴出主要配置与类,代码较长,可以先折叠: 参考:https://www.cnblogs.com/xyzq/p/7049369.html 操作工具类SftpUti ...

  2. Linux下使用wget下载FTP服务器文件

    wget -nH -m --ftp-user=your_username --ftp-password=your_password ftp://your_ftp_host/* 使用命令下载ftp上的文 ...

  3. Firefox下载.net服务器文件时中文乱码

    ASP.NET中产生一个Excel报表,供浏览器下载.显然,下载时经常有汉字报表名称.针对当前的两个主流的浏览器IE和Firefox,似乎没有兼容的解决办法.网上搜索了一些解决方法,但在Firefox ...

  4. 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 ...

  5. Android开发之下载Tomcat服务器的文件到模拟器的SD卡

    Tomcat服务器可以到Apache的官网去下载http://tomcat.apache.org/,如何配置和使用百度下也有很多介绍,只要把Java的SDK配下java_home环境变量就行了,因为T ...

  6. Android使用Xutil3.0下载文件.md

    Android使用Xutil3.0下载文件.md 新建项目: 引入依赖: implementation 'org.xutils:xutils:3.5.0' 添加权限: <uses-permiss ...

  7. 关于springmvc下服务器文件打包成zip格式下载功能

    关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储   版权声明:本文为博主 ...

  8. php自定义函数: 下载本地服务器的大文件

    // 使用方法 $file_path = './a.zip'; // 只能是本地服务器文件, 多大的文件都支持!! down_file($file_path); // 函数参数: 服务器文件路径,下载 ...

  9. paramiko模块的安装和使用(含上传本地文件或文件夹到服务器,以及下载服务器文件到本地)

    安装和使用分两步介绍: 介绍一下,本文的运行环境是win7 64位 和python 2.7  . 安装: WIN7_64位 安装python-ssh访问模块(paramiko)的安装教程,本人亲测下面 ...

随机推荐

  1. linux中的ps命令用法。

    在linux中使用ps命令可以查看有哪些进程在运行和运行的状态.进程是否结束.进程有没有僵尸.哪些进程占用了过多的资源等等. ps命令最常用的是用于监控后台进程的工作情况. 名称:ps 使用权限:所有 ...

  2. 07-2. A+B和C (15)

    给定区间[-231, 231]内的3个整数A.B和C,请判断A+B是否大于C. 输入格式: 输入第1行给出正整数T(<=10),是测试用例的个数.随后给出T组测试用例,每组占一行,顺序给出A.B ...

  3. HUB主要芯片方案

    HUB主要品牌:慧荣.擎泰.联盛  安国.创惟 创惟GL850G简介:拥有低耗电.温度低及接脚数减少等产品特性.它支援4个下游连接埠,采用48 pin LQFP封装,可完全支援USB 2.0/1.1规 ...

  4. 12.04 如何更专业的使用Chrome开发者工具

    顾名思义Chrome开发工具就是一个工具,它允许Web开发人员可以通过浏览器应用程序干预和操作Web页面,也可以通过这个工具调试和测试Web页面或Web应用程序.有了这个工具,你可以做很多有趣的事情: ...

  5. xcode 不值钱的动画UIButton

    #import "ViewController.h" @interface ViewController () /** 按钮 */ @property(nonatomic,weak ...

  6. Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据

    Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据 在这一节中,你将新创建一个新的 MoviesController类,并编写代码,实现获取影片数据和使用视图模板在浏览器中展现 ...

  7. 浅谈JDBC(二)

    JDBC中的事务 简单来说,事务就是要保证一组DAO方法的操作,要么一起成功要么一起失败. 1.事务控制的位置 在Service中的业务方法内进行事务控制. 2.事务控制的代码 a.注意:JDBC会自 ...

  8. centos7源以及相关的一些命令

    yum makecache:将服务器上的软件包信息在本地缓存,以提高 搜索安装软件的速度. yum update:更新所有的rpm包 yum upgrade:大规模的版本升级,与yum update不 ...

  9. 一次搞懂 Assets Pipeline 转载自http://gogojimmy.net/2012/07/03/understand-assets-pipline/

    Assets Pipeline 是 Rails 3.1 一個重要的功能,一直並沒有很去了解其特性,但因為最近都在寫前端的東西在 assets pipeline 的東西上跌跌撞撞了不少次(尤其在 dep ...

  10. 当x含有偶数个1,返回1,否则为0。

    题目描述: /* Return 1 when x contains an even number of 1s;0 otherwise. Assume W=32 */ int even_ones(uns ...