首页 IP地址查询 | Alexa排名查询 | 手机归属地查询
设为首页 收藏本站
  • 网络编程网络编程
  • 软件编程软件编程
  • 数据库技术数据库技术
  • 编程学院
  • 业界资讯 业界资讯
  • 源码中心源码中心
  • 会员中心会员中心
  • 页面导航: 首页MFC编程多媒体 → 下载asf文件

    下载asf文件

    发布:无名者 发布日期:2008-01-18 字体:[增加 减小] 类型:转载

    下面就只可以直接下载网页中任何的数据流文件,比如正在播放的mms数据流,或者asf,wma文件

    #include <iostream>
    #include <fstream>
    #include "winsock2.h"
    using namespace std;

    #define send_rq(msg) { send(sock,msg,strlen(msg),0);printf(msg);}

    int request(char* hostname, char* api, char* parameters, string& message);

    int main()
    {

    wsadata wsadata;
    wsastartup (0x0101, &wsadata);

    char hostname[200];
    if(gethostname(hostname,sizeof(hostname))!=socket_error)
    {
    cout<<"hostname:"<<hostname<<endl;
    string message;
    request(hostname,"1.asf","111",message);
    }
    else
    {
    cout<<"gethostname,error\n";
    }

    wsacleanup( );

    return 0;
    }

    int request(char* hostname, char* api, char* parameters, string& message)
    {
    sockaddr_in sin;
    int sock = socket (af_inet, sock_stream, ipproto_tcp);
    if (sock == -1)
    {
    return -100;
    }
    sin.sin_family = af_inet;
    sin.sin_port = htons( (unsigned short)80);
    struct hostent * host_addr = gethostbyname(hostname);
    if(host_addr==null)
    {
    cout<<"unable to locate host"<<endl ;
    return -103;
    }
    sin.sin_addr.s_addr = *((int*)*host_addr->h_addr_list) ;
    cout<<"port :"<<sin.sin_port<<", address : "<< sin.sin_addr.s_addr<<endl;

    //连接
    if( connect (sock,(const struct sockaddr *)&sin, sizeof(sockaddr_in) ) == -1 )
    {
    cout<<"connect failed"<<endl ;
    return -101;
    }
    //发送接收文件命令
    send_rq("get /");
    send_rq(api);//char* api;这里填url文件名,比如http://127.0.0.1:8888/1.asf中的1.asf
    send_rq(" http/1.0");
    send_rq("\r\n");
    send_rq("host: ");
    send_rq(hostname);
    send_rq("\r\n");
    send_rq("connection: close");
    send_rq("\r\n");
    send_rq("accept: */*\r\n");
    send_rq("user-agent: nsplayer/4.1.0.3856\r\n");
    //char content_header[100];
    //sprintf(content_header,"content-length: %d\r\n",strlen(parameters));
    //send_rq(content_header);
    send_rq("pragma: no-cache,rate=1.000000,request-context=1\r\n");
    send_rq("pragma: xplaystrm=1\r\n");
    send_rq("pragma: xclientguid={c77e7400-738a-11d2-9add-0020af0a3278}\r\n");
    send_rq("pragma: stream-switch-count=2\r\n");
    send_rq("pragma: stream-switch-entry=ffff:1:0 ffff:2:0\r\n");
    send_rq("\r\n");
    //if you need to send a basic authorization
    //string auth = "username:password";
    //figureout a way to encode test into base64 !
    //string authinfo = base64_encode(reinterpret_cast<const unsigned char*>(auth.c_str()),auth.length());
    //string spassreq = "authorization: basic " + authinfo;
    //send_rq(spassreq.c_str());
    /*send_rq("\r\n");
    send_rq(parameters);
    send_rq("\r\n");*/

    //接收头部
    cout<<"####header####"<<endl;
    char c1[1];
    int l,line_length=0;
    bool loop = true;
    bool bheader = false;
    bool find=false;
    while(loop)
    {
    l = recv(sock, c1, 1, 0);
    if(l<0)
    loop = false;
    if(c1[0]==’\n’)
    {
    if(line_length == 0) loop = false;
    line_length = 0;
    if(!find && message.find("200") != -1)
    bheader = true;
    message.clear();
    find=true;
    }
    else if(c1[0]!=’\r’) line_length++;
    cout<<c1[0];
    message += c1[0];

    }
    //接收body
    message="";
    ofstream outfile("pplive.asf",ios::binary);

    if(bheader)
    {
    cout<<"####body####"<<endl ;
    char p[1024];
    while((l = recv(sock,p,1023,0)) > 0)
    {
    outfile.write(p,l);
    outfile.flush();
    p[l] = ’\0’;
    //message += p;
    printf("%d\n",l);
    }
    //cout << (const char *)message;

    outfile.flush();
    }
    else
    {
    outfile.close();
    return -102;
    }


    }


    为配合网络严查,文章评论将关闭敬请谅解.
    同 类 文 章
    最 近 更 新
    热 点 排 行