總的來說,在讀完第一章、第四章和第二章部分後這本書給我的感覺就乙個字:細。能夠對我知道的和不知道的所有知識點全部一一講述,因此個人感覺這本書適合掌握一定的相關知識但不夠系統的人對unix網路方面進行知識串聯;也適合急需某一方面比如第四章tcp傳輸的socket應用,但相關知識薄弱,可以將該書作為工具書籍來按照書上步驟先跑起來。
第一章主要講了一些關於unix網路的相關概念是後面章節的基礎,另外通過乙個基礎的時間獲取服務程式案例來告訴我們網路程式設計的就是20多行核心**的補充和變式,讓我們對網路程式設計有個直觀了解。
該章節需要了解的乙個概念是posix:可移植作業系統介面。這種介面的目的就是符合該介面的**可以在不同支援該介面的硬體裝置上執行,極大的提高了相容性。
首先我們可以看到乙個可以執行的簡單網路客戶端程式秩序要20多行,確實很簡潔。、
針對**,第8行不太好理解,argc是main函式的引數,表示執行main函式可以有的引數個數,該歷程的ar**表示需要輸入的伺服器點分十進位制網路位址(e.g 1.1.1.1),至於argc必須等於2,是因為除了網路位址還有乙個引數是./filename,就是執行可執行檔案。
第10、11行,socket函式意思就是建立socket程式,至於socket是什麼後續會講,現在可以理解為可以通過它來進行網路通訊。我們建立好socket返回乙個socket控制代碼(可以理解為socket的標識),裡面的引數不理解就可以當做固定搭配。11行就是書中作者自己寫的乙個報錯程式(其實就是乙個另類的printf),包括後面的err_相關的函式都是如此。
12行bzero程式很好理解,就是講結構體裡內容全部初始化為0.
13、14、15行都是對servaddr這個結構體進行配置,引數不理解沒關係,後面會講到,沒必要密切關注這些引數,重點在如何去寫乙個socket的結構上。其中htons函式是講主機位元組序列轉換為網路位元組序列,也就是從我們能看懂的13轉換為網路通用的13的乙個格式轉化,而數字13就特指獲取時間指令。15行是講輸入的點分十進位制轉換為二進位制的函式,也就是ip位址格式轉化。
17行就是我們配置好引數後通過socket控制代碼和servaddr結構體引數去連線伺服器。
19-23行read就是讀取從伺服器傳回的時間資訊,fputs就是將資訊輸出到螢幕上(stdout標準輸出)。
另外在書中第8頁下面譯者注寫了網路傳輸的過程和osi層級的關係(建議好好讀),我們需要知道的縮寫詞表示的意思。pud:協議資料單元(不同層的pud表示意思不同);sdu:服務資料單元;mss:最大分節大小;mtu:最大傳輸單元。
這個章節主要講述了包裹函式的重要性,以及書中首字母大寫表示功能相同的包裹函式。
與1.2節呼應,客戶端傳送時間請求,伺服器端如何去相應並且處理的。我們可以看出兩者程式有很多相像的地方。
10行就是socket的建立,不過可以發現這裡使用了包裹函式,將錯誤處理放在了包裹函式裡面,使得**更加簡潔。
15、16行不同的是伺服器在建立完socket配置完結構體後使用bind和listen函式,乙個是配置繫結,乙個是用來監聽,返回乙個listenfd表示伺服器全部配置完畢可以開始執行。
18行accpet函式就是接收客戶端訊息的函式,該函式執行表示伺服器執行,阻塞在這裡等待客戶端傳過來訊息才繼續進行下面步驟。
19、21行乙個是snprintf指定將時間資訊%.24s(最多24位)的格式放入buff裡,然後再通過write函式返回傳輸給客戶端。
14頁中間小字部分比較了不同函式的用法,和那個更安全(可以讀讀)。
不了解的一定要好好讀讀,了解osi模型。
UNIX網路程式設計 UNP 卷2 第一章
今天開始拜讀unp這部神作了 第一章主要是簡介內容,包括對經典ipc和同步機制的描述。雖然卷2主要是講解ipc的,但這個ipc包括了平常所說的程序間通訊和同步。pipe fifo message queue mutex locks semaphores shared memory rpc socke...
重讀UNIX網路程式設計第一章筆記修正
又準備從頭看一遍unp,把一些老筆記放到部落格裡來就當網盤吧,順便修正以及刪減一些之前不夠精煉的老筆記內容.第一章重點如下 對於網際網協議族,osi頂上三層合併為一層,稱為應用層.傳輸層對應著tcp udp等,網路層對應著ipv4 ipv6,osi的資料鏈路層和物理層是隨系統提供的裝置驅動程式和網路...
第一章 Unix基礎
1.5輸入輸出 1檔案描述符 通常是乙個非負整數。核心用它標示乙個特定程序正在訪問的檔案。當核心開啟或建立乙個新檔案時,它返回乙個檔案描述符,在讀寫檔案時,就可使用它。2標準輸入 標準輸出 標準出錯 三個檔案描述符 當執行乙個新程式時,shell為其開啟三個檔案描述符 標準輸入輸出出錯。如果沒什麼特...