websocket 編譯基礎複習

2021-09-13 15:50:25 字數 2865 閱讀 1034

作者部落格:

**後續在寫,

c除了碼過資料結構的題以外,實在沒寫過什麼東西

只能在這裡先總結一下gcc編譯的基本知識才能做下去(大寫的尷尬。。。)

原因就是載入了opensl的標頭檔案,未能找到openssl庫檔案(標頭檔案的實現)

=需要指定編譯所需的opensll的連線庫路徑

sudo apt-get install libssl-dev 安裝也沒找到庫檔案位置

手動編譯生成庫檔案

解壓到目錄下執行

./config -fpic no-shared (-fpic位置無關 no-shared靜態庫)

make

會生成libcrypto.a 與 libssl.a兩個庫檔案

放入指定檔案下(我放在/usr/local/ssl 自己指定位置即可)

gcc main.c tcp.c -l /usr/local/ssl/ -lssl -lcrypto -ldl -lpthread -o main

拼湊著能編譯通過了,但是感覺有問題,還有一大堆沒明白的

-i 指定標頭檔案查詢目錄

egg.

-i /home/hello/include 則頭檔案目錄查詢順序如下

/home/hello/include >>> /usr/include >>> /usr/local/include

-l 指定庫檔案目錄

-l 指定庫檔案明名稱

hello.c

gcc -c hello.c >>> hello.o

靜態庫生成

ar cr libhello.a hello.o >>> libhello.a

動態庫生成

gcc -shared -fpic -o libhello.so hello.o >>> libhello.so

鏈結靜態庫編譯

gcc main.c -l. -lhello -o main

鏈結動態庫編譯

mv libhello.so /usr/lib/ gcc 會在/urs/lib內查詢

gcc main.c -lhello -o main

靜態庫

ld(gnu linker)會去找gcc命令中的引數-l

再找gcc的環境變數library_path

再找內定目錄 /lib /usr/lib /usr/local/lib 這是當初compile gcc時寫在程式內的

動態庫編譯目標**時指定的動態庫搜尋路徑

環境變數ld_library_path指定的動態庫搜尋路徑

配置檔案/etc/ld.so.conf中指定的動態庫搜尋路徑

預設的動態庫搜尋路徑/lib

預設的動態庫搜尋路徑/usr/lib

有關環境變數:

很明顯只需要指定libcrypto.so庫就歐克了

gcc main.c tcp.c -lcrypto -o main

基礎socket模型

socket bind listen

accept -> conn接收客戶端訊息

websocket 協議的握手

資料互動

斷開連線

websocket協議的握手

請求頭

— request header —

響應頭

http 請求頭內updategrade:websocket 標示請求公升級為websocket協議

服務端解析得到sec-websocket-key

拼上乙個guid魔法值258eafa5-e914-47da-95ca-c5ab0dc85b11

通過openssl庫提供的sha1編碼

然後再base64encode得到sec-websocket-accept

返回給客戶端

客戶端收到後用自己的key加密,相同則完成握手

websocket協議資料幀的解析

payload len <126,即為長度

payload len = 126(111 1110) 取後續的16位unsigned int 資料長度

payload len = 127(111 1111) 取後續的 64位unsigned int 為資料長度

編譯原理 複習

1 什麼叫編譯程式 高階語言 翻譯為 目標語言 組合語言或機器語言 2 編譯程式的6個階段 1 詞法分析 簡單理解就是掃瞄,很傻瓜式地由頭到尾掃瞄源程式,識別出 單詞 輸出結果是二元組,即 單詞總別,值 2 語法分析 根據語法規則將單詞符號串行分解成各類語法單位,如 表示式 語句 程式 3 語義分析...

編譯原理複習

介紹編譯原理,了解乙個新的領域,得去了解它的整體框架 語法分析 語義分析 語法制導翻譯 中間 生成 生成彙編 生成優化 執行彙編 3位址或4位址 的彙編執行 1.根據語言寫出文法產生式 2.構造與某一正規式等價自小dfa dfa deterministic finite automation 確定有...

編譯原理複習

文法與語言 基本概念 字母表 字母表是元素的非空有窮集合 字母表中的元素稱為符號 字元或字 字母表也稱符號 字元 集 字母表上的符號串 由字母表中的符號所構成的任何有窮序列被稱之為該字母表上的符號串 字母表上的元素也是該字母表上的符號串 無任何符號的符號串稱為空符號串,記作 符號串的長度 符號串的長...