程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 用 VC++ 和 Winsock 實現與 HTTP 服務器通話

用 VC++ 和 Winsock 實現與 HTTP 服務器通話

編輯:vc教程

一、引 言

---- Windows Socket API是一套開放的、支持多種協議的Windows下的網絡編程接口,它包 括一個標准的 Berkeley Socket功能調用的集合,以及為Windows所作的重要擴充。 Windows Socket經過不斷完善並在眾 多公司的全力支持下,已成為Windows網絡編程 的事實上的標准。

---- 本 文 將 在VC++ 5.0 環 境 下 介 紹 一個基於 Winsock 的 HTTP 客戶應用程序。 讀者可以基於本例 同樣的原理實現其他Internet常用協議(time, SMTP, POP3, Telnet, FTP 等)的客戶應用程序。

二、一個簡單的浏覽器

---- 我將創建一個簡單的浏覽器,以說明如何通過Winsock基於HTTP協議實現HTTP 客戶應 用程序。

---- 首先我將創建一個幫助函數 LogFile(),該函數把傳遞給它的字符串寫到磁盤文件 中。然後再創建 本示例的核心函數 -- HttpClient() 。在這個核心函數中,我將通 過 Winsock 連接到 HTTP 服務器上 (本例中我將使用計算機世界日報 168.160.224.185)。當連接成功後,發送 Get 命令到 HTTP 服務器 去下載指定路徑 上(/99/tips/)的文件。通過幫助函數 LogFile() 把下載的數據記錄到本地磁盤文 件中。

char fname[MAXPATH];
void LogFile(char *p)
{
FILE *fp=fopen(fname,"a+");
fprintf(fp,"%s ",p);
fclose(fp);
}

BOOL HttpClient(void)
{
WSADATA ws;
SOCKET s;
struct sockaddr_in addr;

int iResult;
long lResult;
char strSubAddr[100], strBuffer[100];

lResult = WSAStartup(0x0101,&ws);
s = socket(AF_INET,SOCK_STREAM,0);

addr.sin_family = AF_INET;
addr.sin_port = htons(80);
addr.sin_addr.s_addr = inet_addr
("168.160.224.185"); // 計算機世界日報
iResult=connect(s,(struct sockaddr *)
&addr, sizeof(addr));
if(SOCKET_ERROR == iResult)
{
// 連接失敗
WSACleanup();
return FALSE;
}
else {
// 連接成功
strcpy(strSubAddr, "GET /99/tips/ ");
strcpy(fname, "index.htm");
iResult = send(s, strSubAddr,strlen(strSubAddr),0);

// 下載文件
do {
strset(strBuffer,' ');
iResult = recv(s,strBuffer,sizeof(strBuffer),0);
LogFile(strBuffer);
} while( iResult !=0 );
}

WSACleanup();
return TRUE;
}

三、測試

---- 打開Visual C++ 5.0, 用MFC創建基於對話框的工程Test, 並在對話框上放 置"Test" 按 鈕, 然後添加測試代碼。

Void CTestDlg::OnTest()
{
HttpClient();
}

---- 編譯並運行該測試程序,在測試對話框中,單擊 "Test" 按鈕,

---- "http://www.computerworld.com.cn/99/tips/"的index.htm文件將被下載到本地。

四. 結 論

---- 這應該就是Netscape Navigator,Internet Explorer以及其他浏覽器實現Internet訪 問的基本代碼了. 在這些浏覽器中,其他百分之九十以上的代碼主要用於HTML顯示等 本地處理上。

---- 讀者如果有興趣,基於這些代碼,再加入一些解釋HTML命令的代碼,就可以正確顯示 所下載的HTML文件, 那也就是說將擁有自己版本的一個百分之百的浏覽器了。何不一試 ?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved