」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > [書評] Beej 的網路程式設計指南

[書評] Beej 的網路程式設計指南

發佈於2024-08-15
瀏覽:175

[Book Review] Beej

簡介 - 這本書是關於什麼的?

是的,我終於讀完了這本書。

身為一個在大學裡從未學過電腦網路課程的人,我長期以來一直想集中學習這門學科。然而,我找不到向公眾開放的可靠大學課程(例如麻省理工學院的演算法導論)。許多以「簡介」為前綴的教科書花費了數百頁的篇幅來解釋相當低級的概念,例如路由演算法甚至連接各大洲的實體線路!

然後我找到了網路上常推薦的Beej的網路程式設計指南。乍一看,我覺得這本書很容易閱讀,因為作者以幽默的方式解釋概念。但同時,與其他電腦網路書籍相比,這本書包含了許多程式碼範例,因此我認為它更適合想要實際進行套接字程式設計實踐的程式設計師。

讀完除了第9章之外的所有章節(因為它更像是一堆C套接字函數的參考),我發現它讀起來很好。

好零件

友善介紹技術概念

本書從IP、埠、套接字等一些基本概念開始。然而,它並沒有深入介紹用於網路通訊的非常技術性的演算法或實體設備。作為一名每天處理 Web 應用程式的開發人員,我發現它與我的工作更相關。儘管本書有時會提到位元和字節,但它仍然是可讀的,並且在閱讀書中的 C​​ 程式碼時通常不會進行任何位元運算。

大量程式碼範例

對於那些想要親自編寫程式碼的人來說,這本書適合你。除了電腦網路的一般概述部分外,書中的大部分解釋都附帶了 C 程式碼範例。這對於了解 Web 應用程式中實際的網路通訊如何發生特別有用。例如,輪詢操作會掃描所有已註冊的套接字,檢查是否有傳入事件需要處理。

此外,這些範例不會匯入任何外部程式庫,因此您不必處理惱人的第三方依賴問題。

搜搜配件

主要專注於套接字編程

這本書非常適合作為socket編程和相關係統調用的友好參考書。然而,它不會“更高”或“更低”:

  • 「更高」:當今大多數 Web 應用程式都依賴 HTTP 協定。如果這本書包含更多關於這個更高層的解釋以及實際運行的程式碼,那就更好了。
  • 「lower」:我認為這本書可以使用 Wireshark 等工具來展示資料包的外觀,這些工具可以抓取範例生成的資料包。引入一些用於網路的 Linux/Unix 命令也有助於理解我們的應用程式程式碼如何與核心互動。

但是,我發現了另一個由同一作者編寫的很好的資源:Beej's Guide to Networking Concepts。它似乎比這本書更全面地涵蓋了許多核心概念,並帶有大量編碼練習。我希望這本「概念」書能填補「程式設計」書的空白。

不建議不熟悉C代碼的人使用

如果您對 C 程式設計了解不多,這本書可能會讓您不知所措。它沒有解釋任何基本概念,例如指標或類型轉換。雖然我們不會像處理 CMake 時那樣遭受依賴地獄的困擾,但如果你對 C 不太了解,那麼閱讀程式碼仍然會很困難。

我個人對 C 代碼沒問題。然而,如果這本書是用 Python 編寫的話,可能會更適合初學者,Python 的套接字庫中幾乎包含了 C 語言套接字函數的所有對應函數。同一個作者的「概念」書這次使用了Python,所以我們可以期待那裡有一些樂趣。

結論

總的來說,本書充滿了實用的程式碼範例,這些範例在理解使用套接字系統呼叫的網路應用程式時非常有用。當然,在編寫自己的應用程式時,您實際上並不需要使用這些函數,因為許多語言都支援自己的那些「低階」套接字網路函數的包裝器(Python 有像socketserver 和http 這樣的函式庫) 。儘管如此,我認為一旦你成為開發人員,你就應該了解所有這些使用 HTTPS 或 websocket 的高度抽象通訊背後發生的事情。從這個意義上說,這本書值得一讀,也是一本很好的參考書。

版本聲明 本文轉載於:https://dev.to/uponthesky/book-review-beejs-guide-to-network-programming-9mg如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何有效地選擇熊貓數據框中的列?
    如何有效地選擇熊貓數據框中的列?
    在處理數據操作任務時,在Pandas DataFrames 中選擇列時,選擇特定列的必要條件是必要的。在Pandas中,選擇列的各種選項。 選項1:使用列名 如果已知列索引,請使用ILOC函數選擇它們。請注意,python索引基於零。 df1 = df.iloc [:,0:2]#使用索引0和1 ...
    程式設計 發佈於2025-04-04
  • 如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    postgresql:為每個唯一標識符在postgresql中提取最後一行,您可能需要遇到與數據集合中每個不同標識的信息相關的信息。考慮以下數據:[ 1 2014-02-01 kjkj 在數據集中的每個唯一ID中檢索最後一行的信息,您可以在操作員上使用Postgres的有效效率: id dat...
    程式設計 發佈於2025-04-04
  • 為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    mySQL錯誤#1089:錯誤的前綴鍵錯誤descript [#1089-不正確的前綴鍵在嘗試在表中創建一個prefix鍵時會出現。前綴鍵旨在索引字符串列的特定前綴長度長度,可以更快地搜索這些前綴。 了解prefix keys `這將在整個Movie_ID列上創建標準主鍵。主密鑰對於唯一識...
    程式設計 發佈於2025-04-04
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-04-04
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-04-04
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本編號的替代方法,它是使用以下語法:獲取最新版本:未壓縮)While these legacy URLs still remain in use, it is recommended ...
    程式設計 發佈於2025-04-04
  • 如何將來自三個MySQL表的數據組合到新表中?
    如何將來自三個MySQL表的數據組合到新表中?
    mysql:從三個表和列的新表創建新表 答案:為了實現這一目標,您可以利用一個3-way Join。 選擇p。 *,d.content作為年齡 來自人為p的人 加入d.person_id = p.id上的d的詳細信息 加入T.Id = d.detail_id的分類法 其中t.taxonomy ...
    程式設計 發佈於2025-04-04
  • 如何將多種用戶類型(學生,老師和管理員)重定向到Firebase應用中的各自活動?
    如何將多種用戶類型(學生,老師和管理員)重定向到Firebase應用中的各自活動?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    程式設計 發佈於2025-04-04
  • 為什麼不使用CSS`content'屬性顯示圖像?
    為什麼不使用CSS`content'屬性顯示圖像?
    在Firefox extemers屬性為某些圖像很大,&& && && &&華倍華倍[華氏華倍華氏度]很少見,卻是某些瀏覽屬性很少,尤其是特定於Firefox的某些瀏覽器未能在使用內容屬性引用時未能顯示圖像的情況。這可以在提供的CSS類中看到:。 googlepic { 內容:url(&...
    程式設計 發佈於2025-04-04
  • 為什麼PYTZ最初顯示出意外的時區偏移?
    為什麼PYTZ最初顯示出意外的時區偏移?
    與pytz 最初從pytz獲得特定的偏移。例如,亞洲/hong_kong最初顯示一個七個小時37分鐘的偏移: 差異源利用本地化將時區分配給日期,使用了適當的時區名稱和偏移量。但是,直接使用DateTime構造器分配時區不允許進行正確的調整。 example pytz.timezone(&#...
    程式設計 發佈於2025-04-04
  • 如何同步迭代並從PHP中的兩個等級陣列打印值?
    如何同步迭代並從PHP中的兩個等級陣列打印值?
    同步的迭代和打印值來自相同大小的兩個數組使用兩個數組相等大小的selectbox時,一個包含country代碼的數組,另一個包含鄉村代碼,另一個包含其相應名稱的數組,可能會因不當提供了exply for for for the uncore for the forsion for for ytry...
    程式設計 發佈於2025-04-04
  • 版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    在時間戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源於遺留實現的關注,這些限制需要對當前的_timestamp功能進行特定的實現。 創建表`foo`( `Productid` int(10)unsigned not ...
    程式設計 發佈於2025-04-04
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-04-04
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-04-04
  • 如何使用FormData()處理多個文件上傳?
    如何使用FormData()處理多個文件上傳?
    )處理多個文件輸入時,通常需要處理多個文件上傳時,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    程式設計 發佈於2025-04-04

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3