”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > [书评] Beej 的网络编程指南

[书评] Beej 的网络编程指南

发布于2024-08-15
浏览:551

[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]删除
最新教程 更多>
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-04-07
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案: args)抛出异常{ 日历cal = calendar.getInstance(); SimpleDateFormat SDF =新的SimpleDateFormat(“...
    编程 发布于2025-04-07
  • 在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    mysql-python安装错误:“ mysql_config找不到”“ 由于缺少MySQL开发库而出现此错误。解决此问题,建议在Ubuntu上使用该分发的存储库。使用以下命令安装Python-MysqldB: sudo apt-get安装python-mysqldb sudo pip in...
    编程 发布于2025-04-07
  • 版本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 n...
    编程 发布于2025-04-07
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-04-07
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-04-07
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-04-07
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-04-07
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_re...
    编程 发布于2025-04-07
  • 如何在其容器中为DIV创建平滑的左右CSS动画?
    如何在其容器中为DIV创建平滑的左右CSS动画?
    通用CSS动画,用于左右运动 ,我们将探索创建一个通用的CSS动画,以向左和右移动DIV,从而到达其容器的边缘。该动画可以应用于具有绝对定位的任何div,无论其未知长度如何。问题:使用左直接导致瞬时消失 更加流畅的解决方案:混合转换和左 [并实现平稳的,线性的运动,我们介绍了线性的转换。这...
    编程 发布于2025-04-07
  • 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-07
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-04-07
  • 如何同步迭代并从PHP中的两个等级阵列打印值?
    如何同步迭代并从PHP中的两个等级阵列打印值?
    同步的迭代和打印值来自相同大小的两个数组使用两个数组相等大小的selectbox时,一个包含country代码的数组,另一个包含乡村代码,另一个包含其相应名称的数组,可能会因不当提供了exply for for for the uncore for the forsion for for ytry...
    编程 发布于2025-04-07
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-04-07
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-04-07

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3