首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ Winsock 實現 HTTP 客戶端:從 Socket 到簡易瀏覽器

     編輯:VC 教學

核心流程

  1. WSAStartup 初始化 Winsock。
  2. socket(AF_INET, SOCK_STREAM, 0) 建立 TCP 連線。
  3. connect 連接 HTTP 伺服器(預設埠 80)。
  4. 發送 HTTP GET 請求:GET /path HTTP/1.0\r\nHost: domain\r\n\r\n。
  5. 循環 recv 接收回應,寫入檔案。
  6. closesocket、WSACleanup 清理。

完整範例程式碼

BOOL HttpClient() {
    WSADATA ws; WSAStartup(MAKEWORD(2,2), &ws);
    SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in addr = {0};
    addr.sin_family = AF_INET;
    addr.sin_port = htons(80);
    addr.sin_addr.s_addr = inet_addr("168.160.224.185"); // 目標 IP

    if (connect(s, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) {
        WSACleanup(); return FALSE;
    }

    char req[] = "GET /99/tips/ HTTP/1.0\r\nHost: www.computerworld.com.cn\r\n\r\n";
    send(s, req, strlen(req), 0);

    FILE* fp = fopen("index.htm", "wb");
    char buf[1024]; int n;
    while ((n = recv(s, buf, sizeof(buf), 0)) > 0) {
        fwrite(buf, 1, n, fp);
    }
    fclose(fp);
    closesocket(s); WSACleanup();
    return TRUE;
}

測試與擴充

  • 在 MFC 對話框專案按鈕處理函數呼叫 HttpClient()。
  • 解析 HTTP 標頭分離 Body,支援 Chunked 編碼、Keep-Alive、HTTPS(需 SSL/TLS 庫如 OpenSSL)。
  • 加入 HTML 解析渲染即成簡易瀏覽器核心。

現代替代方案

新專案建議使用 WinHTTP、WinINet 或第三方庫(libcurl、cpp-httplib),支援 HTTPS、Proxy、非同步、HTTP/2 等現代特性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved