#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. MySQL 复制

    第一步:为配置主数据库与备数据库 主:server_id = 1      log_bin = E:\mysql_log_bin #复制事实上是二进制文件在备库上的重做,所以要支持二进制文件. 备: ...

  2. [问题解决] File "/struts-tags" not found

    错误:org.apache.jasper.JasperException: File "/struts-tags" not found 发生场景:tomcat服务器 解决方案:将t ...

  3. Delphi 重启应用程序(创建Bat文件的Process)

    Delphi 重启应用程序在工程主文件中加入Delay(500); //启动程序时请延时一段时间,否则只能重启一次 procedure RestartApp; var BatchFile: TextF ...

  4. 《Java4Android视频教程》学习笔记(三)

    一:抽象类 接口 1.使用abstract修饰抽象类 抽象函数 2.一个类中有一个或者多个抽象函数,必须定义为抽象类 3.抽象类可以不含有抽象函数 4.抽象类不可以生成对象 tip:如果一个代码在语意 ...

  5. Hibernate 配置详解(12) 其实我也不想用这么土的名字

    hibernate.hbm2ddl.import_files 这个配置用于在hibernate根据映射文件执行DDL之前,如果我们自己设置了要事先运行的SQL文件,hibernate就会先执行这些SQ ...

  6. Oracle触发器(trigger):view,schema,database

    视图trigger, instead of 我们知道如果一个view只是由一个table构成,那在view上做啥操作没太多限制.如果view是由多个table组成那在view上做啥unpdate,in ...

  7. IOS框架概览

    iOS是执行在iPhone.iPod Touch或iPad上的操作系统,之前叫做iPhone OS,iOS与Mac OS X有共同的基础架构和底层技术.但iOS是依据移动设备的特点而设计的,所以和Ma ...

  8. 关于iOS8上本地通知接收不到的问题

    在iOS8系统开发使用本地通知时,会出现如下的相关提示语: 1 Attempting to schedule a local notification2 with an alert but haven ...

  9. (转)Log4J日志配置详解

    http://www.cnblogs.com/ITtangtang/p/3926665.html 一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源 ...

  10. linux中的fork()函数以及标准I/O缓冲

    1. fork()创建的新进程成为子进程.一次调用,两次返回,子进程的返回值是0,而父进程的返回值是新子进程的进程ID,如果出现错误,fork返回一个负值. 2. 可以通过fork返回的值来判断当前进 ...