【发布时间】:2010-11-14 14:12:45
【问题描述】:
虽然我没有专业地使用套接字,但我觉得它们很有趣。我阅读了 Richard Stevens 的 Unix Network Programming 的某些部分(我认为这是圣经,因为我问的每个人都提到过),但问题是这些示例需要一个通用头文件 unp.h,它是一个 PIA 才能使用。
你们中的一些人能否推荐一本关于 Unix/Linux 中套接字编程的好读物?考虑到我是相对有经验的 C/C++ 编码器。
【问题讨论】:
虽然我没有专业地使用套接字,但我觉得它们很有趣。我阅读了 Richard Stevens 的 Unix Network Programming 的某些部分(我认为这是圣经,因为我问的每个人都提到过),但问题是这些示例需要一个通用头文件 unp.h,它是一个 PIA 才能使用。
你们中的一些人能否推荐一本关于 Unix/Linux 中套接字编程的好读物?考虑到我是相对有经验的 C/C++ 编码器。
【问题讨论】:
规范参考是 W. Richard Stevens 的 UNIX 网络编程。 upn.h 实际上只是一个帮助标题,以使书中的示例更清晰 - 它并没有做任何特别神奇的事情。
要快速启动和运行,很难超越Beej's Guide To Network Programming using Internet Sockets。
【讨论】:
我用Beej's Guide to Network Programming
有大量的客户端和服务器代码示例,每一步都有解释。
【讨论】:
这是关于C and Linux Socket 主题的在线教程。
【讨论】:
APUE 是让您熟悉 unix 环境以及 unix 上下文中的 C 编程的好方法,以便您继续进行套接字编程。
【讨论】:
除了已经提到的 Stevens 书籍之外,我发现以下两本对于 TCP/IP 编程问题(尤其是陷阱和常见错误)非常好,而且阅读时间相对较短:
之后,您可能想阅读网络应用程序的源代码。各种 linux 实用程序和应用程序是一个很好的起点。
【讨论】:
你可以参考我很久以前在ufl.edu教本科计算机科学课程时写的论文,计算机网络基础:"A Crash Course In Unix TCP/IP Socket Programming".
纸张很旧。我很惊讶,当我为它大吃一惊时,仍然有六处引用它。
多年来,一些编译器语义和必要的头文件可能已经发生了一些变化,但设置 UDP 或 TCP 套接字以及进行所讨论的基本 DNS 工作的基础知识在今天仍然有效。
祝你好运!
【讨论】:
这似乎是典型的两难境地,要么涉水而去,要么先潜入深水区。
FWIW 我发现 Steven 的包装代码也很烦人,而且我一直在努力让至少一些示例在我尝试过的每个平台上都能正常工作。也就是说,包装器隐藏了大部分琐碎的错误处理,这些错误处理在本已很大的书中会是重复的、无意义的,并且会占用更多的空间。 (但公平地说,编辑们可以扔掉本书最后 1/4 的 XTI 以腾出空间。)
网络编程是一个足够深入的主题,您可以交替使用表面波和做炮弹。已经提到了几个很好的快速入门资源,它们可以帮助您度过“哇,我搞定了”阶段。但是当你需要提升到“我需要它变得强大和可靠,因为我的工作/产品依赖于它”阶段时,你会开始欣赏史蒂文斯,因为他有超乎寻常的能力预测你当前的问题。
多年来,我成功地忽略了 Steven 作品的某些章节。但我很感激他们在我需要的时候就在那里。
【讨论】:
W. Richard Stevens 的 UNIX 网络编程第 1/2 卷具有传奇色彩。
Ithilgore 还在raw sockets 上写了一篇非常详细的文档。
此外,Beej 的套接字编程指南写得很好,易于理解,并且是明确的推荐。
无论您阅读什么,请确保编写补充代码。
【讨论】:
您还考虑了更一般的参考, Unix™ 系统编程:通信、并发和线程 作者:凯 A.罗宾斯,史蒂文·罗宾斯 普伦蒂斯大厅 国际标准书号:0-13-042411-0
不过,Richard Steven 的书是关于该特定主题的最完整的参考资料
【讨论】:
Michael Kerrisk 的书(他也是 Linux 手册页的维护者)the linux programming interface
关于 Unix 编程的一切都有;第 57 到 61 章在套接字上。
【讨论】: