具体描述
全书共分12章。第1章介绍TCP/IP网络协议、Sockets概念和本书使用的一些专门术语。第2章介绍标准Sockets接口程序设计原理,以及如何设计出Sockets典型的客户服务器模式的应用程序,并给出了一个通用的实例程序。第3章介绍WindowsSockets基于消息的异步选择机制、阻塞处理方法、异步支持函数以及Windows下网络程序设计。第4章介绍3个实际的通信实例程序:点对点实时通信程序、广播通信程序和阻塞处理程序。第5章提供了Windows Sockets1.1库函数参考。第6章介绍WinSock2体系结构
和重叠I/O、服务质量等扩展特性。第7章提供了Windows Sockets2扩展库函数。第8章用实例介绍了WinSock2扩展库函数的使用及多址广播程序设计。第9章至第12章分别介绍了MFC,Java,Delphi和PowerBuilder等Wind0ws应用开发环境下的Sockets网络程序设计。另外,附录A提供了Windows Sockets的错误码。附录B提供了Windows Sockets多点通信与多址广播的语义。
本书的为在Windows环境下使用Sockets进行网络程序设计的程序员,在Windows下各种开发平台都支持Windows Sockets上的网络程序设计,提供了网络编程接口。它为读者提供在Windows下使用各种平台实现网络程序设计方面的帮助。另外,本书也可作为大学本科生或研究生的参考资料,还可作为高等院校计算机网络课的教学参考书。
作者简介
目录信息
1.1 TCP/IP协议的起源和发展
1.2 TCP/IP的体系结构和特点
1.3 术语
1.3.1 套接字
1.3.2 WindowsSockets实现
1.3.3 阻塞处理例程
1.3.4 多址广播
第2章 套接字编程原理
2.1 问题的引入
2.2 套接字编程基本概念
2.2.1 网间进程通信
2.2.2 服务方式
2.2.3 客户机/服务器模式
2.2.4 套接字类型
2.3 基本套接字系统调用
2.3.1 创建套接字_________cket()
2.3.2 指定本地地址一 bind()
2.3.3 建立套接字连接__connect()与accept()
2.3.4 监听连接一一listn()
2.3.5 数据传输一send()与recv()
2.3.6 输入/输出多路复用 一select()
2.3.7 关闭套接字一一closesocket()
2.4 典型套接字调用过程举例
2.5 一个通用的实例程序
2.5.1 头文件
2.5.2 函数源 文件
2.5.3 简单服务器程序示例
2.5.4 简单客户程序示例
第3章 WindowsSockets1.1程序设计
3.1 Wind0wsSOckets简介
3.1.1 什么是WindowsSockets
3.1.2 WindowsSockets组成部分
3.1.3 WindowsSockets对BerkeleySockets的扩充
3.2 异步选择机制
3.3 阻塞处理方法
3.4 WindowsSockets网络程序设计
3.4.1 启动与终止
3.4.2 异步请求服务
3.4.3 异步数据传输
3.4.4 出错处理
3.4.5 宏的使用
3.4.6 移植应用程序
3.5 较深入的问题
3.5.1 中间DLL设计
3.5.2 多线程环境下的WindowsSockets
第4章 WindowsSockets1.1应用实例
4.1 点对点网络实时通信程序
4.1.1 客户程序
4.1.2 服务器程序
4.1.3 其它文件
4.2 广播通信程序
4.2.1 建立一个可以广播的套接字
4.2.2 发送与接收广播消息
4.2.3 广播通信程序源代码
4.3 阻塞处理示例程序
第5章 WindowsSockets1.1库函数
5.1 库函数综述
5.1.1 套接字函数
5.1.2 数据库函数
5.1.3 WindowsSockets专用的增设函数
5.2 标准socket函数
5.2.1 accept()
5.2.2 bind()
5.2.3 closesocket()
5.2.4 connect()
5.2.5 getpeername()
5.2.6 getsocknaame()
5.2.7 getsockopt()
5.2.8 htonl()
5.2.9 htons()
5.2.10 inet-addr()
5.2.11 inet-ntoa()
5.2.12 ioctlsocket()
5.2.13 listen()
5.2.14 ntoh1()
5.2.15 ntohs()
5.2.16 recv()
5.2.17 recvfrom()
5.2.18 select()
5.2.19 send()
5.2.20 sendto()
5.2.21 Setsckopt()
5.2.22 shutdown()
5.2.23 socket()
5.3 数据库函数
5.3.1 gethostbyaddr()
5.3.2 gethostbyname()
5.3.3 gethostname()
5.3.4 getprotobyname()
5.3.5 getprotobynumber()
5.3.6 getservbyname()
5.3.7 getservbyport()
5.4 WindowsSockets1.1专用的增设函数
5.4.1 WSAAsyncGetHostByAddr()
5.4.2 WSAAsyncGetHostByName()
5.4.3 WSAAsyncGetProtoByName()
5.4.4 WSAAsyncGetProtoByNumber()
5.4.5 WSAAsyncGetServByName()
5.4.6 WSAAsyncGetServByPort()
5.4.7 WSAAsyncSelect()
5.4.8 WSACancelAsyncRequest()
5.4.9 WSACancelBlockingCall()
5.4.10 WSACleanup()
5.4.11 WSAGetLastError()
5.4.12 WSAIsB1ocking()
5.4.13 WSASetBlockingHook()
5.4.14 WSASetLastError()
5.4.15 WSAStartup()
5.4.16 WSAUnhookBlockingHook()
5.5 WindowsSockets定义的宏
5.5.1 FD-CLR
5.5.2 FD-ISSET
5.5.3 FD-SET
5.5.4 FD ZERO
5.5.5 WSAGETASYNCBUFLEN
5.5.6 WSAGETASYNCERROR
5.5.7 WSAGETSELECTERROR
5.5.8 WSAGETSELECTEVENT
5.5.9 WSAMAKEASYNCREPLY
5.5.10 WSAMAKESELECTREPLEY
第6章 Windows Sockets2的扩展特性
6.1 WindowsSockets2概述
6.2 WinSock2体系结构
6.2.1 同时使用多个传输协议
6.2.2 与WindowSSockets1.1应用程序的向后兼容性
6.3 在WindowsSockets中注册传输协议
6.3.1 分层协议与协议链
6.3.2 使用多个协议
6.3.3 select()函数应用中关于多个服务提供者的限制
6.4 函数扩展机制
6.5 名字解析与注册
6.5.1 协议无关的名字解析
6.6 重叠I/O和事件对象
6.6.1 事件对象
6.6.2 接收操作完成指示
6.6.3 WSAOVERLAPPED的细节
6.6.4 使用事件对象异步通知
6.7 服务质量(QOS)
6.7.1 QOS数据结构
6.7.2 QOS模板
6.7.3 默认值
6.8 套接字组
6.9 共享套接字
6.10 连接建立和拆除的增强功能
6.11 扩展的字节顺序转换例程
6.12 分散/聚集方式I/O
6.13 协议无关的多址广播与多点通信
6.14 新增套接字选项一览
6.15 新增套接字ioctl操作代码
第7章 WindowsSockets2扩展库函数
7.1 WindowsSockets2扩展库函数列表
7.2 WinSock2库函数
7.2.1 WSAAccept()
7.2.2 WSACLoseEvent()
7.2.3 WSAC0nnect()
7.2.4 WSACreateEvent()
7.2.5 WSADuplicateSocket()
7.2.6 WSAEnumNetworkEvents()
7.2.7 WSAEnumProtocols()
7.2.8 WSAEventSelect()
7.2.9 WSAGetOverlappedResult()
7.2.10 WSAGetQoSByName()
7.2.11 WSAHtonl()
7.2.12 WSAHtons()
7.2.13 WSAIoctl()
7.2.14 WSAJoinLeaf()
7.2.15 WSANtohl()
7.2.16 WSANtohs(])
7.2.17 WSARecv()
7.2.18 WSARecvDisc0nnect()
7.2.19 WSARecvFrom()
7.2.20 WSAResetEvent()
7.2.21 WSASend()
7.2.22 WSASendDisconnect()
7.2.23 WSASendTO()
7.2.24 WSASetEvent()
7.2.25 WSASocket()
7.2.26 WSAWaitF0rMultipleEvents()
7.3 WinSock2名字解析函数
7.3.1 WSAAddressToString()
7.3.2 WsAEnumNameSpacePr0viders()
7.3.3 WSAEnumNameSpaceProviders()
7.3.4 WSAGetServiceClassNameByClassld()
7.3.5 WSAInstallServiceCIass()
7.3.6 WSALookupServiceBegin()
7.3.7 WSALookupServiceEnd()
7.3.8 WSALookupServiceNext()
7.3.9 WSARemoveServiceClass()
7.3.10 WSASetService()
7.3.11 WSAStringToAddress()
第8章 WinSock2应用实例
8.1 WinSock2基本函数的使用
8.1.1 客户程序
8.1.2 服务器程序
8.1.3 头文件
8.2 多址广播程序
第9章 MFCSockets程序设计
9.1 MFC用于网络编程的类
9.1.1 CAsyncSocket类
9.1.2 CSocket类
9.2 程序实例
9.2.1 Client端的程序代码
9.2.2 Server端的程序代码
第10章 JavaSockets程序设计
10.1 概述
10.2 流Socket程序的实现
10.2.1 与流Socket有关的Java类
10.2.2 流Socket程序的实现
10.3 数据报Socket程序的实现
10.3.1 与数据报Socket有关的Java类
10.3.2 数据报Socket的编程实现
第11章 DelphiSockets程序设计
11.1 Delphi及其网络编程简介
11.2 ClientSocket控件介绍
11.2.1 ClientSocket控件简介
11.2.2 ClientSocket的属性
11.2.3 C1ientSocket的方法
11.2.4 ClientSocket的事件
11.2.5 ClientSocket的使用
11.3 ServerSocket控件的介绍
11.3.1 ServerSocket控件简介
11.3.2 ServerSocket控件的属性(Property)
11.3.3 ServerSocket控件的方法(Method)
11.3.4 ServerSocket控件的事件(Event)
11.3.5 ServerSocket的使用
11.4 Delphi网络编程应用示例
11.4.1 服务程序
11.4.2 客户程序
第12章 PowerBuilderSockets程序设计
12.1 PowerBuilder网络程序概述
12.2 使用Winsock函数
12.3 Winsock对象u-socket
12.3.1 u-socket定义的实例变量
12.3.2 u-socket定义的结构
12.3.3 u-socket的事件处理程序
12.3.4 usocket定义的用户对象函数
12.4 应用程序示例
12.4.1 客户程序
12.4.2 服务器程序
附录A WindowsSockets错误码
A.1 WindowsSockets错误码列表
A.2 WindowsSockets错误码扩展描述
附录B 多点通信与多址广播语义
B.1 多点通信与多址广播引言
B.2 多点通信分类法
B.3 WinSock2的多点通信与多址广播接口元素
B.4 加入多点通信叶子节点的语义
B.5 多点通信套接字与常规套接字之间的语义差别
B.6 现存的多点通信协议如何支持这些扩展
参考文献
· · · · · · (收起)
读后感
用户评价
这本书的结构编排堪称艺术品,逻辑衔接自然流畅,层层递进。它没有像某些技术书籍那样,在开篇就抛出一大堆晦涩难懂的概念,而是选择了一个循序渐进的切入点,先从最简单的客户端/服务器模型入手,然后逐步引入多线程、多进程处理连接、以及更复杂的广播和组播机制。这种“搭积木”式的讲解方式,极大地降低了初学者的学习曲线。我特别留意了书中关于错误处理和异常健壮性的部分,这往往是初级开发者最容易忽略却至关重要的环节。作者详细列举了在网络中断、连接超时、资源耗尽等各种边界条件下,程序应该如何优雅地退出或恢复,并提供了大量经过实战检验的代码片段作为参考。阅读体验上,文字叙述严谨而不失生动,配图虽然不多,但每一张都点到了问题的核心,帮助理解那些抽象的网络状态机转换。可以说,这本书是少有的,能够同时满足理论研究者和一线实战工程师需求的著作。
翻开这本书,最直观的感受就是其内容的广度和深度令人印象深刻。它不仅仅涵盖了基础的流式和数据报套接字编程,更让人惊喜的是其中对高级特性的详尽阐述。例如,对于异步I/O(AIO)和非阻塞I/O(Non-blocking I/O)模型的对比分析,简直是教科书级别的。作者细致入微地对比了select、poll、epoll(在Linux环境下)以及IOCP(在Windows环境下)这几种主流的I/O复用技术各自的优劣势和适用场景。我尤其欣赏它对性能优化的探讨,书中列举了大量的实际案例,展示了如何通过调整缓冲区大小、合理利用零拷贝技术(如果涉及操作系统层面讨论的话)来榨干网络性能的每一滴潜力。对于那些追求极致并发处理能力的服务端开发者来说,这本书提供的洞察力是无价的。它迫使你去思考,为什么某些设计在特定负载下表现出色,而在另一种情况下却会急剧恶化,这种思考方式的培养,远比记住几行代码更重要。
这本书的论述风格非常老练和成熟,透着一股久经沙场的味道。它没有刻意去追赶最新的技术热点,而是专注于那些经过时间检验的核心网络编程范式和原理。我特别欣赏其中关于安全方面的讨论,例如如何正确地使用`shutdown`函数来控制连接的半关闭状态,以及在使用UDP进行可靠数据传输时需要自己构建的确认机制。这些细节的探讨,显示出作者对网络通信中潜在风险的深刻洞察。而且,这本书对于不同网络模型的编程范式(如阻塞与非阻塞、同步与异步)的哲学差异进行了深入的辩论,这促使我反思自己过去习惯性的编程模式是否是最优解。总而言之,它更像是一本技术规范的解读与实践指南的结合体,读完后不仅提升了动手能力,更重要的是,它重塑了我对构建稳定、高效网络服务的认知框架。
坦白讲,市面上关于网络编程的书籍汗牛充栋,但大多都停留在“如何调用API”的层面,读完后你或许能写个聊天程序,但一遇到性能瓶颈或诡异的丢包问题就束手无策了。这本书的价值就在于它提供了“为什么”的答案。它将网络编程置于一个更宏大的操作系统和网络架构的背景下进行审视。例如,它对HTTP协议在Socket层面的封装和解析过程进行了剖析,帮助理解上层应用是如何建立在底层I/O之上的。书中关于网络调试和故障排查的章节,更是经验的结晶。它推荐了一系列实用的工具,并教你如何利用这些工具来捕获、分析和解释网络数据包,从而定位那些隐藏在协议栈深处的 bug。这种实战导向的思维训练,让我对待任何网络相关的疑难杂症都多了一份底气和系统性的排查思路,不再是盲目地修改代码碰运气。
这本书简直是网络编程领域的百科全书,内容详实得令人咋舌。特别是它对TCP/IP协议栈的讲解,深入浅出,即便对于初学者来说也能构建起坚实的理论基础。我记得其中有章节专门剖析了套接字(Socket)的底层实现机制,光是这个部分就让我对网络通信的原理有了全新的认识。作者没有停留在API调用的层面,而是扎根于操作系统的内核,解释了数据包如何在用户空间和内核空间之间传递,以及操作系统如何管理网络连接的生命周期。读完后,我感觉自己不再是简单地调用`socket()`、`bind()`、`listen()`,而是真正理解了这些函数背后的“魔法”。书中还花了大量篇幅对比了不同操作系统环境下Socket API的细微差别和兼容性问题,这对于编写跨平台网络应用简直是救命稻草。它不是那种浮于表面的“速成手册”,而是实打实的“内功心法”,需要静下心来反复研读,才能将其中的精髓融会贯通。那种一步步搭建起复杂网络应用框架的成就感,是其他轻量级读物无法给予的。