/*伺服器端*/
wsastartup(makeword(2, 0), &wsa_data); /* 初始化 winsock 資源 */
srv_soc = socket(af_inet, sock_stream, 0); /* 建立 socket */
if (srv_soc == invalid_socket)
/* 伺服器位址 */
serv_addr.sin_family = af_inet;
serv_addr.sin_port = htons(port);
serv_addr.sin_addr.s_addr = htonl(inaddr_any);
result = bind(srv_soc, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
if (result == socket_error) /* 繫結失敗 */
result = listen(srv_soc, somaxconn);
printf("[web] the server is running ... ...\n");
wsastartup(makeword(2, 0), &wsa_data); /* 初始化 winsock 資源 */
addr = inet_addr(host);
if (addr == inaddr_none)
memcpy(&addr, host_ent->h_addr_list[0], host_ent->h_length);
}/* 客戶端 */
serv_addr.sin_family = af_inet;
serv_addr.sin_port = htons(port);
serv_addr.sin_addr.s_addr = addr;
http_sock = socket(af_inet, sock_stream, 0); /* 建立 socket */
if (result == socket_error) /* 連線失敗 */
緊接著client要傳送http訊息頭讓伺服器處理:
/* 傳送 http 請求 */
if (result == socket_error) /* 傳送失敗 */
可以看到,我們使用了send()函式,其中cmd_buf是訊息頭內容。此時伺服器接收對應資訊:
acpt_soc = accept(srv_soc, (struct sockaddr *) &from_addr, &from_len);
if (acpt_soc == invalid_socket) /* 接受失敗 */
if (recv_len == socket_error) /* 接收失敗 */
我們用accept()函式接受連線建立,然後recv()函式接收客戶端的內容。伺服器端接收到控制指令後開啟對應的檔案並讀取,回傳:
res_file = fopen(filename, "rb+"); /* 用二進位制格式開啟檔案 */
if (res_file == null)
fseek(res_file, 0, seek_end);
file_len = ftell(res_file);
fseek(res_file, 0, seek_set);
type = http_get_type_by_suffix(suffix); /* 檔案對應的 content-type */
if (type == null)
do /* 傳送檔案, http 的訊息體 */
} while ((read_len > 0) && (file_len > 0));
fclose(res_file);
return
1;
以此類推,上傳檔案基本操作也只是逆操作。 超文字傳輸協議HTTP 二
用於支援www瀏覽的網路協議為http,這是一種最基本的客戶機 伺服器的訪問協議。瀏覽器向伺服器傳送請求,而伺服器回應相應的網頁。http協議從1990年開始出現,發展到當前的http1.1標準,已經有了相當多的擴充套件,然而其最基本的實現是非常簡單的,伺服器需要進行的額外處理相當少,這也是為什麼w...
Python實現基於HTTP檔案傳輸例項
這篇文章主要介紹了python實現基於http檔案傳輸的方法,以例項形式詳細講述了server端與client端的實現 非常具有實用價值,需要的朋友可以參考下 一 問題 因為需要最近看了一下通過post請求傳輸檔案的內容 並且自己寫了server和client實現了乙個簡單的機遇http的檔案傳輸工...
基於http協議的加密傳輸方案
不談https只談http 1 敏感資訊的不可見性 使用http協議傳輸資料很容易被抓包監聽傳輸內容,如果這些資料中存在敏感資訊的話,風險太大了。因此我們需要對我們的傳輸資料進行一定的加密處理,即使資料被預期接收方之外的其它不法分子攔截,也無法輕易的破譯此次請求的傳輸內容!最簡單的方案就是對傳輸資料...