基於http傳輸(二)

2021-07-27 15:51:05 字數 2393 閱讀 3687

/*伺服器端*/

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協議傳輸資料很容易被抓包監聽傳輸內容,如果這些資料中存在敏感資訊的話,風險太大了。因此我們需要對我們的傳輸資料進行一定的加密處理,即使資料被預期接收方之外的其它不法分子攔截,也無法輕易的破譯此次請求的傳輸內容!最簡單的方案就是對傳輸資料...