#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 特殊语句

    1.获取下当前mysql的插件目录select @@plugin_dir 2.mysql移动文件 select load_file('文件路径') into dumpfile '导出路径' 3.des ...

  2. django学习之Model(五)MakingQuery

    接着上篇. 10-一次更新多个对象 有时想要对QuerySet中的所有对象的某一个field来设定一个值,这时候可以像下边这样用update(): # Update all the headlines ...

  3. Windows 取得至高无上的权限

    第一步:gpedit.msc 第二步:计算机配置-->windows 设置 -->安全设置 -->安全选项 -->用户账户控制 -->以管理员批准模式运行所有管理员 -- ...

  4. MYSQL alter procedure alter function 它们只可以更改过程的特性,不可以更改过程的逻辑。

    例子: delimiter // create procedure proc_a(in numberA int) 这样create procedure 是正确的 begin select number ...

  5. VC实现卡拉OK字幕叠加

    一. GDI编程基础 字幕叠加,应当是属于图形.图像处理的范畴.在Windows平台上,图形.图像处理的方法当然首选GDI(Graphics Device Interface,图形设备接口).GDI是 ...

  6. 第七届河南省赛10403: D.山区修路(dp)

    10403: D.山区修路 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 69  Solved: 23 [Submit][Status][Web Bo ...

  7. block 解析 - 内存

    block结构体相应的也有一个成员引用,这样会增加对局部变量的 _para1引用,在Block销毁的时候引用就释放掉了 我们了解到了用__block修饰的变量,可以在block内部修改,__block ...

  8. Android Animation学习(二) ApiDemos解析:基本Animatiors使用

    Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.ObjectAnimator.AnimatorSet ApiDemos中Animation部分是单独 ...

  9. struts2页面输出错误信息

    <package name="user" namespace="/user" extends="struts-default"> ...

  10. spring MVC中文乱码相关总结

    总结几种方式,都使用的话能解决大多数乱码的情况 1.所有页面使用 <%@page language="java" pageEncoding="UTF-8" ...