代理上网相关代码

代理上网相关代码收藏

#include   "stdafx.h"     #include   "HttpDownload.h"             #ifdef   _DEBUG     #undef   THIS_FILE     static   char   THIS_FILE[]=__FILE__;     #define   new   DEBUG_NEW     #endif         //////////////////////////////////////////////////////////////////////     //   Construction/Destruction     //////////////////////////////////////////////////////////////////////         HttpDownload::HttpDownload()     {     m_isSendMsg=FALSE;         }         HttpDownload::~HttpDownload()     {         }         UINT   HttpDownload::Download(CString   url,CString   saveFile,DWORD   fileSize,BOOL   isForceGetFileLength,BOOL   isForceDown)     {     CHAR   szHead[]="Accept:   */*/r/n/r/n";             VOID*   szTemp[16384];     HINTERNET     downFileHandle;             DWORD   dwByteToRead   =   0;     DWORD   dwSizeOfRq   =   4;     CFile   downFile;     DWORD   dwSize=0;     DWORD   downTotal=0;     CString   tempFileName;             if(m_hSession!=NULL)     {     if(!(downFileHandle=InternetOpenUrl(m_hSession,   url,   szHead,lstrlenA(szHead),   INTERNET_FLAG_RELOAD,0)))     {     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_OPENFILEERROR;     }     if(isForceGetFileLength)     {     if(!HttpQueryInfo(downFileHandle,   HTTP_QUERY_CONTENT_LENGTH   |   HTTP_QUERY_FLAG_NUMBER,(LPVOID)&dwByteToRead,   &dwSizeOfRq,   NULL))     {     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_GETFILELENGTHERROR;     }     }else     dwByteToRead=fileSize;     if(!isForceDown)     {     CFileFind   findDownload;     if(findDownload.FindFile(saveFile))     {         findDownload.FindNextFile();     DWORD   fileLength=findDownload.GetLength();     findDownload.Close();     if(fileLength==dwByteToRead)     {         InternetCloseHandle(downFileHandle);     if(m_isSendMsg)     ::PostMessage(m_hwnd,IOM_DOWNLOAD,0,fileLength);     return   HTTPDOWN_DOWNLOADSUCCESS;     }     else     {     tempFileName=saveFile+".down";     if(!downFile.Open(tempFileName,CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite))     {     downFile.Close();     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_DOWNLOADCREATEFILEERROR;     }     }         }else     {     findDownload.Close();     tempFileName=saveFile+".down";     if(!findDownload.FindFile(tempFileName))     {     findDownload.Close();     if(!downFile.Open(tempFileName,CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite))     {     downFile.Close();     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_DOWNLOADCREATEFILEERROR;     }     }else     {     findDownload.Close();     if(!downFile.Open(tempFileName,CFile::modeWrite|CFile::shareDenyWrite))     {     downFile.Close();     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_DOWNLOADCREATEFILEERROR;     }     DWORD   curFileLength=downFile.SeekToEnd();     if(m_isSendMsg)     ::PostMessage(m_hwnd,IOM_DOWNLOAD,0,curFileLength);     if(!InternetSetFilePointer(downFileHandle,curFileLength,NULL,0,0))     {     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_DOWNLOADSETPOINTERROR;       }     }     }         }else     {     tempFileName=saveFile+".down";     DeleteFile(saveFile);     DeleteFile(tempFileName);     if(!downFile.Open(tempFileName,CFile::modeWrite|CFile::shareDenyWrite))     {     downFile.Close();     return   HTTPDOWN_DOWNLOADCREATEFILEERROR;     }     }     do     {           if(!InternetReadFile(downFileHandle,   szTemp,   16384,   &dwSize)   )           {         downFile.Close();           InternetCloseHandle(downFileHandle);         return   HTTPDOWN_DOWNLOADREADDATAERROR;           }           if(!dwSize)         break;               else           {         downTotal+=dwSize;         downFile.Write(szTemp,dwSize);         if(m_isSendMsg)         ::PostMessage(m_hwnd,IOM_DOWNLOAD,0,dwSize);           }     }while(TRUE);     downFile.Close();       CFile::Rename(tempFileName,saveFile);     InternetCloseHandle(downFileHandle);     return   HTTPDOWN_DOWNLOADSUCCESS;     }else     return   HTTPDOWN_DOWNLOADSEESSIONNULL;     }             UINT   HttpDownload::InitHttpSession()     {     DWORD   dwFlags;     InternetGetConnectedState(&dwFlags,   0);     if(!(dwFlags   &   INTERNET_CONNECTION_PROXY))     {     AfxMessageBox("----1----");     m_hSession   =   ::InternetOpen("VISALL_DOWNLOAD",INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,   NULL,   NULL,   0);     }     else     {     AfxMessageBox("----2----");     m_hSession   =   ::InternetOpen("VISALL_DOWNLOAD",INTERNET_OPEN_TYPE_PRECONFIG,   NULL,   NULL,   0);     }     if(m_hSession==NULL)     return   HTTPDOWN_INITSESSIONERROR;     else     return   HTTPDOWN_INITSESSIONSUCCESS;     }         UINT   HttpDownload::UnInitHttpSession()     {     if(m_hSession)     {     if(InternetCloseHandle(m_hSession))     return   HTTPDOWN_UNINITSESSIONSUCCESS;     else     return   HTTPDOWN_UNINITSESSIONERROR;     }else     return   HTTPDOWN_UNINITSESSIONSUCCESS;     }         void   HttpDownload::SetProgressHwnd(HWND   hwnd)     {     m_hwnd=hwnd;     }         void   HttpDownload::SetProgressMsg(BOOL   isSend)     {     m_isSendMsg=isSend;     }         UINT   HttpDownload::SetTimeOut(DWORD   connectTimeOut,DWORD   receiveTimeout,DWORD   sendTimeOut)     {     if(m_hSession)     {     if(!InternetSetOption(m_hSession,   INTERNET_OPTION_CONNECT_TIMEOUT,   &connectTimeOut,   sizeof(DWORD)))     return   HTTPDOWN_SETTIMEOUTERROR;     if(!InternetSetOption(m_hSession,   INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT,   &receiveTimeout,   sizeof(DWORD)))     return   HTTPDOWN_SETTIMEOUTERROR;     if(!InternetSetOption(m_hSession,   INTERNET_OPTION_CONTROL_SEND_TIMEOUT,   &sendTimeOut,   sizeof(DWORD)))     return   HTTPDOWN_SETTIMEOUTERROR;     if(!InternetSetOption(m_hSession,   INTERNET_OPTION_DATA_SEND_TIMEOUT,   &sendTimeOut,   sizeof(DWORD)))     return   HTTPDOWN_SETTIMEOUTERROR;     if(!InternetSetOption(m_hSession,   INTERNET_OPTION_DATA_RECEIVE_TIMEOUT,   &receiveTimeout,   sizeof(DWORD)))     return   HTTPDOWN_SETTIMEOUTERROR;     return   HTTPDOWN_SETTIMEOUTSUCCESS;     }else     return   HTTPDOWN_SETTIMEOUTERROR;     }             #if   !defined(AFX_HTTPDOWNLOAD_H__41263D8F_321A_42F0_889F_3ADB44C80EC0__INCLUDED_)     #define   AFX_HTTPDOWNLOAD_H__41263D8F_321A_42F0_889F_3ADB44C80EC0__INCLUDED_         #if   _MSC_VER   >   1000     #pragma   once     #endif   //   _MSC_VER   >   1000         #include   <wininet.h>     #include   <mmsystem.h>         const   UINT   HTTPDOWN_OPENFILEERROR=1;     const   UINT   HTTPDOWN_GETFILELENGTHERROR=2;     const   UINT   HTTPDOWN_INITSESSIONERROR=3;     const   UINT   HTTPDOWN_INITSESSIONSUCCESS=4;     const   UINT   HTTPDOWN_DOWNLOADSUCCESS=5;     const   UINT   HTTPDOWN_DOWNLOADCREATEFILEERROR=6;     const   UINT   HTTPDOWN_DOWNLOADSETPOINTERROR=7;     const   UINT   HTTPDOWN_DOWNLOADREADDATAERROR=8;     const   UINT   HTTPDOWN_UNINITSESSIONERROR=9;     const   UINT   HTTPDOWN_UNINITSESSIONSUCCESS=10;     const   UINT   HTTPDOWN_SETTIMEOUTSUCCESS=11;     const   UINT   HTTPDOWN_SETTIMEOUTERROR=12;     const   UINT   HTTPDOWN_DOWNLOADSEESSIONNULL=13;         class   HttpDownload         {     public:     HttpDownload();     virtual   ~HttpDownload();         //Operator     public:     UINT   Download(CString   url,CString   saveFile,DWORD   fileSize,BOOL   isForceGetFileLength,BOOL   isForceDown);     void   SetProgressHwnd(HWND   hwnd);     void   SetProgressMsg(BOOL   isSend);     UINT   InitHttpSession();     UINT   UnInitHttpSession();     UINT   SetTimeOut(DWORD   connectTimeOut,DWORD   receiveTimeout,DWORD   sendTimeOut);     //Attribtue     private:     HWND   m_hwnd;             BOOL   m_isSendMsg;     HINTERNET   m_hSession;//   会话句柄     #define   IOM_DOWNLOAD   WM_USER   +155     };         #endif   //   !defined(AFX_HTTPDOWNLOAD_H__41263D8F_321A_42F0_889F_3ADB44C80EC0__INCLUDED_)  

================

3. 使用代理服务器 (1)请将dwAccessType设置成INTERNET_OPEN_TYPE_PROXY (2)设置lpszProxy    (a)代理的格式必须为:[<protocol>=][<scheme>://]<proxy>[:<port>].    (b)其中protocol, scheme://, :port是可选项, 如果忽略这三者, 则它们默认分别为       HTTP, HTTP://, :80. 即默认为HTTP代理.    (c)多个代理必须使用" "(空格)隔开    (d)各种常用代理的使用见如下:       HTTP:       HTTP=HTTP://proxyserver:port       FTP:       FTP:FTP://proxyserver:port       GOPHER       GOPHER=HTTP://proxyserver:port       SOCKS=proxyserver:port       其中前三种都可以在msdn中找到, 但第四种我可是找了N多地方才好不容易找到了. 另外要注意, msdn中明确说明只有安装了IE才能使用SOCKS代理. --------------------------------------------------------------- The   following   example   code   shows   how   authentication   could   be   handled   using   InternetSetOption.             HINTERNET   hOpenHandle,     hResourceHandle;     DWORD   dwError,   dwStatus;     DWORD   dwStatusSize   =   sizeof(dwStatus);     char   strUsername[64],   strPassword[64];         hOpenHandle   =   InternetOpen("Example",                                                             INTERNET_OPEN_TYPE_PRECONFIG,                                                             NULL,   NULL,   0);     hConnectHandle   =   InternetConnect(hOpenHandle,                                                                         "www.server.com",                                                                         INTERNET_INVALID_PORT_NUMBER,                                                                         NULL,                                                                       NULL,                                                                         INTERNET_SERVICE_HTTP,                                                                       0,0);         hResourceHandle   =   HttpOpenRequest(hConnectHandle,   "GET",                                                                         "/premium/default.htm",                                                                         NULL,   NULL,   NULL,                                                                           INTERNET_FLAG_KEEP_CONNECTION,                                                                           0);         resend:         HttpSendRequest(hResourceHandle,   NULL,   0,   NULL,   0);         HttpQueryInfo(hResourceHandle,   HTTP_QUERY_FLAG_NUMBER   |                                   HTTP_QUERY_STATUS_CODE,   &dwStatus,   &dwStatusSize,   NULL);         switch   (dwStatus)     {             case   HTTP_STATUS_PROXY_AUTH_REQ:   //   Proxy   Authentication   Required                     //   Insert   code   to   set   strUsername   and   strPassword.                         //   cchUserLength   is   the   length   of   strUsername   and                       //   cchPasswordLength   is   the   length   of   strPassword.                     DWORD   cchUserLength,   cchPasswordLength;                         //   Insert   code   to   safely   determine   cchUserLength   and                     //   cchPasswordLength.   Insert   appropriate   error   handling   code.                     InternetSetOption(hResourceHandle,                                                           INTERNET_OPTION_PROXY_USERNAME,                                                           strUsername,                                                           cchUserLength+1);                         InternetSetOption(hResourceHandle,                                                           INTERNET_OPTION_PROXY_PASSWORD,                                                           strPassword,                                                           cchPasswordLength+1);                     goto   resend;                     break;                 case   HTTP_STATUS_DENIED:           //   Server   Authentication   Required.                     //   Insert   code   to   set   strUsername   and   strPassword.                         //   cchUserLength   is   the   length   of   strUsername   and                       //   cchPasswordLength   is   the   length   of   strPassword.                     DWORD   cchUserLength,   cchPasswordLength;                         //   Insert   code   to   safely   determine   cchUserLength   and                       //   cchPasswordLength.   Insert   error   handling   code   as                       //   appropriate.                     InternetSetOption(hResourceHandle,   INTERNET_OPTION_USERNAME,                                                         strUsername,   cchUserLength+1);                     InternetSetOption(hResourceHandle,   INTERNET_OPTION_PASSWORD,                                                         strPassword,   cchPasswordLength+1);                     goto   resend;                     break;     }         //   Insert   code   to   read   the   data   from   the   hResourceHandle     //   at   this   point.       

 

====================================== 设置代理服务器的代码:     for   example:             INTERNET_PER_CONN_OPTION_LIST         List;     INTERNET_PER_CONN_OPTION                   Option[1];     unsigned   long                                         nSize   =   sizeof(INTERNET_PER_CONN_OPTION_LIST);         Option[0].dwOption   =   INTERNET_PER_CONN_PROXY_SERVER;     Option[0].Value.pszValue   =   "http://myproxy:8080";         List.dwSize   =   sizeof(INTERNET_PER_CONN_OPTION_LIST);     List.pszConnection   =   NULL;     List.dwOptionCount   =   1;     List.dwOptionError   =   0;     List.pOptions   =   Option;         if(!InternetSetOption(NULL,   INTERNET_OPTION_PER_CONNECTION_OPTION,   &List,   nSize))           printf("InternetQueryOption   failed!   (%d)/n",   GetLastError());     //more   detail:     HOWTO:   Programmatically   Query   and   Set   Proxy   Settings   Under   Internet   Explorer    

 

潮汐研究作为海洋科学的关键分支,融合了物理海洋学、地理信息系统及水利工程等多领域知识。TMD2.05.zip是一套基于MATLAB环境开发的潮汐专用分析工具集,为科研人员与工程实践者提供系统化的潮汐建模与计算支持。该工具箱通过模块化设计实现了两大核心功能: 在交互界面设计方面,工具箱构建了图形化操作环境,有效降低了非专业用户的操作门槛。通过预设参数输入模块(涵盖地理坐标、时间序列、测站数据等),用户可自主配置模型运行条件。界面集成数据加载、参数调整、可视化呈现及流程控制等标准化组件,将复杂的数值运算过程转化为可交互的操作流程。 在潮汐预测模块中,工具箱整合了谐波分解法与潮流要素解析法等数学模型。这些算法能够解构潮汐观测数据,识别关键影响要素(包括K1、O1、M2等核心分潮),并生成不同时间尺度的潮汐预报。基于这些模型,研究者可精准推算特定海域的潮位变化周期与振幅特征,为海洋工程建设、港湾规划设计及海洋生态研究提供定量依据。 该工具集在实践中的应用方向包括: - **潮汐动力解析**:通过多站点观测数据比对,揭示区域主导潮汐成分的时空分布规律 - **数值模型构建**:基于历史观测序列建立潮汐动力学模型,实现潮汐现象的数字化重构与预测 - **工程影响量化**:在海岸开发项目中评估人工构筑物对自然潮汐节律的扰动效应 - **极端事件模拟**:建立风暴潮与天文潮耦合模型,提升海洋灾害预警的时空精度 工具箱以"TMD"为主程序包,内含完整的函数库与示例脚本。用户部署后可通过MATLAB平台调用相关模块,参照技术文档完成全流程操作。这套工具集将专业计算能力与人性化操作界面有机结合,形成了从数据输入到成果输出的完整研究链条,显著提升了潮汐研究的工程适用性与科研效率。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值