Windows mobile http编程

原创 2011年01月20日 10:23:00

http.h

typedef struct S_HTTP_Res_DATA
{
    unsigned char *data;
    unsigned long dataLen;
}HTTP_Res_DATA;

class CHttp
{
public:
    CHttp(void);
    virtual ~CHttp(void);

    static int HttpConnectUrl(CString url, HTTP_Res_DATA *hData);
    static int HttpConnectUrl(CString url, CString filePath);
    static int ReleaseHttpData(HTTP_Res_DATA *hData);
    static int HttpDownloadFile(CString url, CString filePath);
    static int WInetHttpDownloadFile(CString url, CString filePath);
};

http.cpp

#include "StdAfx.h"
#include "Http.h"

CHttp::CHttp(void)
{
}

CHttp::~CHttp(void)
{
}

#include <afxinet.h>
void HttpExceptionHandle(CInternetException *e)
{
    TCHAR buf[255];
    memset(buf, 0, sizeof(buf));

    e->GetErrorMessage(buf, 255);
    TRACE(_T("Exception message: %s/n"), buf);
}
/************************************************************************/
/*Function Name: HttpConnectUrl
/*Input parameters:
/*    url: specify the url to connect.
/*Output parameters:
/*    hData: store the response data returned from url.
/*Return values:
/*    0: success.
/*    -1: got some error.
/*Remarks:
/*    The method ReleaseHttpData must be called after call to this method
/*    to release the memory resources.
/************************************************************************/
int CHttp::HttpConnectUrl(CString url, HTTP_Res_DATA *hData)
{
    CInternetSession inetSess;
    CHttpFile *httpFile = NULL;

    try
    {
        httpFile = (CHttpFile *)inetSess.OpenURL(url);
    }
    catch(CInternetException *e)
    {
        TRACE(_T("---InternetException in HttpConnectUrl---/n"));
        HttpExceptionHandle(e);
        e->Delete();
        inetSess.Close();
        delete httpFile;
return -1;
    }

    ULONGLONG fileSize = httpFile->GetLength();
    hData->data = (UCHAR *)malloc((size_t)(fileSize + 1));
    memset(hData->data, 0, fileSize + 1);
    hData->dataLen = fileSize;

    UCHAR tempBuf[1024];
    int rLen, i = 0;
    while(rLen = httpFile->Read(tempBuf, 1024))
    {
        memcpy(hData->data + i, tempBuf, rLen);
        i += rLen;
    }
    hData->data[i] = '/0';

    delete httpFile;
    inetSess.Close();

return 0;
}
/************************************************************************/
/*Function Name: HttpConnectUrl
/*Input parameters:
/*    url: specify the url to connect.
/*    filePath: specify where to store the xml data.
/*Return values:
/*    0: success.
/*    -1: got some error.
/*Remarks: 
/*    The method ReleaseHttpData must be called after call to this method
/*    to release the memory resources.
/************************************************************************/
int CHttp::HttpConnectUrl(CString url, CString filePath)
{
    CInternetSession inetSess;
    CHttpFile *httpFile = NULL;

    try
    {
        httpFile = (CHttpFile *)inetSess.OpenURL(url);
    }
    catch(CInternetException *e)
    {
        TRACE(_T("---InternetException in HttpConnectUrl---/n"));
        HttpExceptionHandle(e);
        e->Delete();
        inetSess.Close();
        delete httpFile;
        return -1;
    }

    CFile file;
    file.Open(filePath, CFile::modeCreate | CFile::modeWrite);

#define RW_BLOCK_SIZE 1024

    unsigned char buf[RW_BLOCK_SIZE];
    memset(buf, 0, sizeof(buf));
    int rLen;
    while(rLen = httpFile->Read(buf, RW_BLOCK_SIZE))
    {
        file.Write(buf, rLen);
        memset(buf, 0, sizeof(buf));
    }
    file.Close();

    delete httpFile;
    inetSess.Close();

    return 0;
}
/************************************************************************/
/*Function name: ReleaseHttpData
/*Input parameters:
/*
/*Output parameters:
/*    hData: specify the pointer to the useless HTTP_Res_DATA. 
/************************************************************************/
int CHttp::ReleaseHttpData(HTTP_Res_DATA *hData)
{
    free(hData->data);

return 0;
}

#define RW_BLOCK_SIZE 1024
/************************************************************************/
/*Function Name: HttpDownloadFile
/*Input parameters:
/*    url: specify which file to download.
/*    filePath: specify store the file downloaded to where.
/*Output parameters:
/*Return values:
/*    0: success.
/*    -1: got some error.
/*Remarks:
/************************************************************************/
int CHttp::HttpDownloadFile(CString url, CString filePath)
{
    CInternetSession inetSess;
    CHttpFile *httpFile = NULL;

    try
    {
        httpFile = (CHttpFile *)inetSess.OpenURL(url, 1, INTERNET_FLAG_TRANSFER_BINARY);
        //httpFile = (CHttpFile *)inetSess.OpenURL(url, 1, INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_DONT_CACHE);
    }
    catch (CInternetException *e)
    {
        TRACE(_T("---InternetException in HttpDownloadFile---/n"));
        HttpExceptionHandle(e);
        e->Delete();
        inetSess.Close();
        delete httpFile;
return -1;
    }
    
    CFile file;
    file.Open(filePath, CFile::modeCreate | CFile::modeWrite);

    unsigned char buf[RW_BLOCK_SIZE];
    memset(buf, 0, sizeof(buf));
    int rLen;
    while(rLen = httpFile->Read(buf, RW_BLOCK_SIZE))
    {
        file.Write(buf, rLen);
        memset(buf, 0, sizeof(buf));
    }
    file.Close();

    delete httpFile;
    inetSess.Close();

return 0;
}
/************************************************************************/
/*Function Name: WInetHttpDownloadFile
/*Input parameters:
/*    url: specify which file to download.
/*    filePath: specify store the file downloaded to where.
/*Output parameters:
/*Return values:
/*    0: success.
/*    -1: got some error.
/*Remarks: GPRS、WIFI
/************************************************************************/
#include <WinInet.h>
int CHttp::WInetHttpDownloadFile(CString url, CString filePath)
{
    //Tells the Internet DLL to initialize internal data structures.
    HINTERNET hInternet = InternetOpen(_T("THTTP"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
    if(!hInternet)
    {
return -1;
    }
    //Retrieve data corresponding to a URL.
    HINTERNET hRequest = InternetOpenUrl(hInternet, url, NULL, 0, INTERNET_FLAG_EXISTING_CONNECT, 0);
    if(!hRequest)
    {
        InternetCloseHandle(hInternet);
return -1;
    }

    CFile file;
    file.Open(filePath, CFile::modeCreate | CFile::modeWrite);
    wchar_t wbuf[RW_BLOCK_SIZE] = {0};
    DWORD dwRead = 0;
    while(InternetReadFile(hRequest, wbuf, RW_BLOCK_SIZE, &dwRead))
    {
        file.Write(wbuf, dwRead);
        memset(wbuf, 0, sizeof(wbuf));
        if(dwRead < RW_BLOCK_SIZE)
        {
    break;
        }
    }
    file.Flush();
    file.Close();

    InternetCloseHandle(hRequest);
    InternetCloseHandle(hInternet);

return 0;
}

Windows mobile http编程

http.htypedef struct S_HTTP_Res_DATA{    unsigned char *data;    unsigned long dataLen;}HTTP_Res_DAT...
  • ZOLoveGD
  • ZOLoveGD
  • 2009年06月03日 15:54
  • 2472

Visual Studio开发Windows Mobile程序

转自:http://developer.51cto.com/art/200908/144102.htm Visual Studio 2005无疑是开发Windows Mobile的最佳工具,其本身...
  • boonya
  • boonya
  • 2013年11月29日 17:36
  • 2063

Windows Mobile 5.0 SDK 下载地址

Windows Mobile 5.0 开发包:(包括工具和学习资源):http://download.microsoft.com/download/6/0/8/608530c5-7e9a-4032-b...
  • friend_yutian
  • friend_yutian
  • 2007年01月09日 12:30
  • 6881

windows mobile 上隐藏和关闭X以及OK的处理

1、隐藏X: 在WM_CREATE里 SetWindowLong(hWnd,GWL_STYLE,WS_NONAVDONEBUTTON ); 3、如果想将X按钮改为退出程序而不是最小化,可以在初始化wi...
  • dream19861009
  • dream19861009
  • 2010年07月28日 22:57
  • 634

Windows 10 操作系统,更新之后无法打开Windows Mobile 设备中心,要么双击无反应。要么正在启动,过会就关闭了。

本机上运行services.msc 找到服务“基于Windows Mobile 2003的设备连接”在登陆选项卡内选择“本地系统账户”,点击“应用”保存设置。然后重新运行windows mobile设...
  • qq954637101
  • qq954637101
  • 2017年10月09日 08:55
  • 670

使用Windows Mobile Device Center进行手机的同步

转载http://blog.sina.com.cn/s/blog_7119b1a40100m1vz.html 如果你的操作系统是Windows Vista或者是Windows 7...
  • sdhjy12345
  • sdhjy12345
  • 2015年10月20日 13:31
  • 1017

Windows mobile专区应用软件

Windows mobile专区应用软件
  • mobilechannel
  • mobilechannel
  • 2005年01月26日 17:10
  • 2058

windows mobile 6.5 输入法的切换

方法是通过枚举,获得相应的输入法,然后设置当前输入法为该输入法。 foreach (InputMethod m in this.inputPanel1.InputMethods)...
  • code_style
  • code_style
  • 2013年11月26日 16:43
  • 1783

关于Windows Mobile连接不上电脑的问题的解决方法

对于移动便携设备来说,Windows Mobile(以下简称wm)是在开发中同步电脑的有效工具。涉及到嵌入式的开发,一般都会考虑到使用该同步方式。 首先同步pc硬件上要准备的有开发板,usb连接线,...
  • cwj976277916
  • cwj976277916
  • 2015年09月07日 17:32
  • 3923

Windows Mobile图形图像编程

原文:http://www.codeproject.com/KB/mobile/Caleidoscope.aspx?msg=2056946       本文介绍SmartPhone与Pocket PC...
  • favormm
  • favormm
  • 2009年07月18日 16:32
  • 3144
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows mobile http编程
举报原因:
原因补充:

(最多只允许输入30个字)