首页 资讯应用与安全Web开发数据库编程语言开源服务管理信息化技术论坛
[栏目导航]>>[主页]>>[编程语言]>>[C、C++、C#]>>[阅读信息]
 [关闭
用VC++实现http代理
发布时间:2008-09-06 10:14:44   点评:0   人气:12 

  

  为了帮网友些个用http 下载 动画的程序,临时在网上翻了翻,看看有没有利用http代理来下载 的例子。结果,似乎很多人都愿意去转载一个有头无尾的例子,还美其名曰“我在查阅RFC文档和相关资料后,特总结一些TCP协议 穿透代理服务器 的程序片断,希望对大家有所帮助。”

      如果真的想帮助大家,为什么不说的详细一些?

      无奈之下,自己去翻rfc文档,找了些资料,写了这个利用http代理来 下载 文件的资料

      代码如下:

      (1)一些基本变量

    SOCKET HTTPSocket; // 主socket
    strUCt sockaddr_in SocketAddr; // address socket
    struct sockaddr_in BindSocket; // for bind


    int m_nRecvTimeout; // recieve timeout
    int m_nSendTimeout; // send timeout

    WSADATA wsaData;

    // 要下载文件部分。好像在BindSocket.sin_addr.s_addr = inet_addr (strHost);时,只能使用ip地址,所以了。。。

    // 如果谁知道更好的方法,别忘了告诉我一下。

    CString strHost="111.111.111.111 ";
    CString DownLoadAddress=" http://www.aitenshi.com/bbs/images/ ";
    CString hostFile="logo.gif";
    int HttpPort=80;

 

      (2)一些函数,用来取得http头,和获取文件大小

    int GetFileLength(char *httpHeader)
    {
    CString strHeader;
    int local;
    strHeader=(CString)httpHeader;
    local=strHeader.Find("Content-Length",0);
    local+=16;
    strHeader.Delete(0,local);
    local=strHeader.Find("\r");
    strHeader.SetAt(local,'\0');

    char temp[30];
    strcpy(temp,strHeader.GetBuffer(strHeader.GetLength()));
    return atoi(temp);
    }

    int GetHttpHeader(SOCKET sckDest,char *str)
    {
    BOOL m_bResponsed=0;
    int m_nResponseHeaderSize;

    if(!m_bResponsed)
    {
    char c = 0;
    int nIndex = 0;
    BOOL bEndResponse = FALSE;
    while(!bEndResponse && nIndex < 1024)
    {
    recv(sckDest,&c,1,0);
    str[nIndex++] = c;
    if(nIndex >= 4)
    {
    if(str[nIndex - 4] == '\r' && str[nIndex - 3] == ''
    && str[nIndex - 2] == '\r' && str[nIndex - 1] == '')
    bEndResponse = TRUE;
    }
    }
    m_nResponseHeaderSize = nIndex;
    m_bResponsed = TRUE;
    }

    return m_nResponseHeaderSize;

    }


      (3)用来发送的部分

 [关闭]
C、C++、C#    上一条:  VC++实现COM事件接收器
   下一条:  在浏览器端应用MVC
点评(0) 表扬 赞成 补充 纠正 否定 提醒 举报     笔名:
[提交]