程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 設計網頁刷新器《精通Unix下C語言編程與項目實踐》之十一

設計網頁刷新器《精通Unix下C語言編程與項目實踐》之十一

編輯:關於C語言

文章試讀 不拘一個遍程序系列編程序不能一個腦袋鑽到底,有時要學會變通,即所謂的曲線救國。 職場規劃:一些雜七雜八的職場感悟吧。不值錢的軟件人才 精力充沛與事業成功   讓系分來得更猛烈些吧    不值錢的系統分析師   經濟危機下大學生如何就業 我的詩歌:都是我的打油詩,但是很值得一讀。不要工作還衣食無憂之四難歌   香格裡拉美人圖 寶寶圖片:超可愛的小寶寶 博客 考試培訓:主要是關於考研、軟考和等級的相關題解。2009考研試題分析   2008年12月程序員試題分析    2009年軟考備考全攻略    2008年5月程序員試題解析   《精通Unix下C語言編程與項目實踐》之十一 設計網頁刷新器  作者:朱雲翔,胡平  

15.4.4 網頁刷新器

程序http1在訪問頁面上存在著如下不足:其一,只能根據IP地址而不能根據域名訪問網頁;其二,只能訪問一個特定的網頁;其三,只讀取一次WEB服務端返回的信息。事實上,在大多數頁面的響應報文中,實體內容項會有很多的內容,遠遠超過了一次recv調用能夠接收的范圍,因此客戶端必須反復調用recv直到信息接收完畢為止。 本處設計一個網頁刷新器,用戶將需要訪問的WEB服務器域名和網頁絕對路徑地址作為命令行參數輸入,如代碼15-17所示: 代碼15-17 網頁刷新器節自/code/chapter15/http2.c) #include <comlib.h> char buf2[]=                /* 組裝HTTP協議GET請求報文 */ "GET %s HTTP/1.0\r\n" "Accept: */*\r\n" "Accept-Language: zh-cn\r\n" "Accept-Encoding: gzip, deflate\r\n" "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\r\n" "Host: %s\r\n" "Connection: Keep-Alive\r\n\r\n"; int main(int argc, char *argv[]) {     char buf[1024];     int nSock, i=9999, j=0;     struct hostent *host;     if (argc != 3) return 0;     /* 參數argv[1]是WEB服務器域名,域名轉主機地址 */            if ((host = gethostbyname(argv[1])) == NULL)        {         herror("gethostbyname");            return 2;     }     fprintf(stderr, "%s\n", inet_ntoa(*((struct in_addr *)host->h_addr)));     /* 主機地址轉字符串IP地址,建立TCP連接,WEB端的端口號一般是80 */        ASSERT(ConnectSock(&nSock, 80, inet_ntoa(*((struct in_addr *)host->h_addr))) == 0);     /* 組建HTTP協議GET請求包 */        sprintf(buf, buf2, argv[2], argv[1]);     /* 發送HTTP協議GET請求報文 */     WriteFile(nSock, buf, strlen(buf));     fprintf(stderr, buf);     while (i > 0)     {   /* 反復接收套接字nSock上的信息,直到發生錯誤或接收不到信息為止 */         memset(buf, 0, sizeof(buf));         i = recv(nSock, buf, sizeof(buf), 0);         j = j + i;         fprintf(stderr, buf);     }     /* 中斷套接字連接 */     close(nSock);     PrintLog(stderr, "%d", j); } 實踐經驗】函數sprintf的格式控制參數第二個參數)不一定必須為常量字符串,也可以為變量字符串,比如代碼15-17中的黑體語句中就使用了buf2作為格式控制字符串。 編譯代碼15-17: # make http2         cc -o http2 http2.c -O -DUNIX -DDEBUG -DTRACE_FILE='"./trace"' -D__PATH__='"/"' -I/u/zyx/code/comlib/include  -L/u/zyx/code/comlib/lib  -lcom   運行代碼15-17: 例1. 訪問以下URL: [url]http://publish.games.sina.com.cn/poll.php?p_id=560&t_id=1327[/url] 實現網頁投票器功能: # http2 publish.games.sina.com.cn /poll.php?p_id=560&t_id=1327 例2. 訪問網頁“[url]www.csai.cn[/url]”: # http2 [url]www.csai.cn[/url] /  注意】本節講述網頁刷新器的設計,目的只是為了向讀者闡述基於TCP連接的SOCKET客戶端程序的設計方法和域名轉化為IP地址的方法。請讀者妥善使用網頁刷新器,不要把它作為一種攻擊WEB端服務器流量的工具。   相關文章: 封面          前言        目錄         策劃         作者 動態庫        變長參數    文件鎖       外設         僵死進程 定時器        I/O重定向   消息隊列    共享內存    實踐項目: 開發網頁投票器一)  二)  開發網頁投票器    

本文出自 “編程浪子朱雲翔” 博客,請務必保留此出處http://zhuyunxiang.blog.51cto.com/653596/138511

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