第1篇 基础协议第1章 Internet与网络通信模型概述 11.1 Internet概述 11.1.1 Internet的发展历史 11.1.2 Internet的管理机构 31.1.3 国内Internet网络建设的现状 51.2 网络通信模型和协议簇 61.2.1 OSI参考模型 61.2.2 TCP/IP协议簇体系结构 11习题 12第2章 TCP/IP协议簇及其应用 142.1 IP 142.1.1 IP基础 142.1.2 IP的关键机制 162.2 TCP和UDP 172.2.1 TCP的网络功能 172.2.2 TCP段结构 182.2.3 TCP的基本工作流程 202.2.4 UDP 222.3 其他常用协议 232.3.1 ARP 232.3.2 ICMP 262.3.3 Telnet 282.3.4 FTP 292.3.5 SMTP和POP3 31习题 32第3章 IP地址和子网规划 343.1 IP地址 343.1.1 IP地址的结构 343.1.2 IP地址的分类 353.1.3 特殊的IP地址 373.2 子网划分 383.2.1 子网 383.2.2 子网掩码 393.2.3 CIDR表示法 453.2.4 单播、组播和广播地址 46习题 49第2篇 网络编程第4章 网络编程基础 504.1 网络编程相关的基本概念 504.1.1 网络编程与进程通信 504.1.2 Internet中网间进程的标识 534.1.3 网络协议的特征 564.1.4 高效的用户数据报协议 594.1.5 可靠的传输控制协议 594.2 三类网络编程 614.2.1 基于TCP/IP协议栈的网络编程 614.2.2 基于WWW应用的网络编程 624.2.3 基于.NET框架的Web Services网络编程 624.3 客户机/服务器交互模式 654.3.1 网络应用软件的地位和功能 654.3.2 客户机/服务器模式 664.3.3 客户机与服务器的特性 674.3.4 容易混淆的术语 674.3.5 客户机与服务器的通信过程 684.3.6 网络协议与C/S模式的关系 694.3.7 错综复杂的C/S交互 694.3.8 服务器如何同时为多个客户机服务 704.3.9 标识一个特定服务 714.4 P2P模式 724.4.1 P2P技术的兴起 724.4.2 P2P的定义和特征 734.4.3 P2P的发展 734.4.4 P2P的关键技术 744.4.5 P2P系统的应用与前景 74习题 75第5章 Socket编程基础 765.1 Socket网络编程接口的产生与发展 765.1.1 Socket编程接口起源于UNIX操作系统 765.1.2 Socket编程接口在Windows和Linux操作系统中得到继承和发展 775.2 Socket的工作原理和基本概念 775.2.1 Socket协议的工作原理 775.2.2 什么是Socket 785.2.3 Socket的服务方式和类型 785.3 WinSock编程基础 795.3.1 构建WinSock应用程序框架 795.3.2 IP地址的表示形式 825.4 面向连接的Socket编程 845.4.1 面向连接的Socket通信流程 845.4.2 socket()函数 855.4.3 bind()函数 865.4.4 listen()函数 875.4.5 accept()函数 885.4.6 recv()函数 905.4.7 send()函数 915.4.8 closesocket()函数 935.4.9 shutdown()函数 945.4.10 connect()函数 945.4.11 TCP Socket服务器应用程序编程实例 955.4.12 TCP Socket客户端应用程序编程实例 1005.5 面向非连接的Socket编程 1045.5.1 面向非连接的Socket通信流程 1045.5.2 sendto()函数 1055.5.3 recvfrom()函数 1065.6 Socket选项 1085.6.1 调用getsockopt()函数获取Socket选项 1085.6.2 调用setsockopt()函数设置Socket选项 111习题 113第6章 探测网络中的在线设备 1146.1 获取本地计算机的网络信息 1146.1.1 使用ipconfig命令获取本地网络信息 1146.1.2 获取本地网络信息的开发接口IP Helper API 1156.1.3 获取本地网络适配器信息 1166.1.4 获取本地主机名、域名和DNS服务器信息 1206.1.5 获取本地计算机网络接口的基本信息 1246.1.6 获取本地计算机IP地址表 1276.1.7 添加和删除IP地址 1306.2 扫描子网中的地址 1356.2.1 计算指定子网内包含的所有IP地址 1356.2.2 实现ping的功能 1396.2.3 扫描子网 146习题 154第7章 NetBIOS网络编程技术 1567.1 NetBIOS协议及应用 1567.1.1 NetBIOS协议 1567.1.2 使用NBTSTAT命令 1597.2 NetBIOS开发接口 1607.2.1 NetBIOS操作 1607.2.2 NCB结构体 1617.2.3 其他常用NetBIOS结构体 1657.2.4 Netbios()函数 1677.2.5 获取LANA上的所有NetBIOS名字 1687.2.6 获取网络适配器上的MAC地址 1727.3 在程序中实现NBTSTAT命令的功能 1747.3.1 本实例的工作原理 1747.3.2 定义的结构体 1757.3.3 为获取NetBIOS信息而定义的函数 1757.3.4 实现NBTSTAT命令功能的主函数 180习题 181第8章 高级Socket编程技术 1828.1 Socket编程模型概述 1828.2 阻塞与非阻塞模式Socket编程 1848.2.1 设置非阻塞模式Socket 1848.2.2 非阻塞模式服务器应用程序编程实例 1858.2.3 非阻塞模式客户端应用程序编程实例 1898.2.4 基于非阻塞模式的多线程服务器应用程序编程实例 1928.3 基于Select模型的Socket编程 1958.3.1 select()函数 1958.3.2 基于Select模型的服务器应用程序实例 1968.4 基于WSAAsyncSelect模型的Socket编程 2038.4.1 WSAAsyncSelect()函数 2038.4.2 创建窗口 2048.4.3 窗口例程 2078.4.4 基于WSAAsyncSelect模型的服务器编程 2088.5 基于WSAEventSelect模型的Socket编程 2138.5.1 WSAEventSelect()函数 2138.5.2 创建和管理事件对象 2148.5.3 WSAWaitForMultipleEvents()函数 2158.5.4 WSAEnumNetworkEvents()函数 2168.5.5 基于WSAEventSelect模型的服务器编程 2168.6 基于重叠I/O模型的Socket编程 2218.6.1 WSASocket()函数 2218.6.2 调用WSASend()函数发送数据 2228.6.3 调用WSARecv()函数接收数据 2238.6.4 GetOverlappedResult()函数 2248.6.5 使用事件通知来管理重叠I/O操作 2248.6.6 使用完成例程来管理重叠I/O操作 2278.7 基于完成端口模型的Socket编程 2318.7.1 完成端口模型的工作原理 2318.7.2 创建完成端口对象 2328.7.3 等待重叠I/O的操作结果 2338.7.4 基于完成端口模型的服务器应用程序实例 234习题 240第9章 基于WinPcap技术的网络数据包捕获、过滤和分析技术 2429.1 WinPcap技术基础 2429.1.1 WinPcap的体系结构 2429.1.2 NIC驱动器和NDIS 2439.1.3 网络组包过滤(NPF)模块 2449.1.4 捕获数据包的原理和步骤 2469.2 下载和安装WinPcap开发包 2479.2.1 下载WinPcap 2479.2.2 安装WinPcap 2499.2.3 源代码的目录结构 2509.3 在Visual C++中使用WinPcap技术 2519.3.1 环境配置 2519.3.2 获取与网络适配器绑定的设备列表 2529.3.3 获取网络适配器的高级属性信息 2559.3.4 打开网络适配器并实现抓包功能 2589.3.5 不使用事件处理器进行抓包 2629.3.6 过滤数据包 2659.3.7 分析数据包 266习题 271第3篇 实例应用第10章 设计局域网探测器 27310.1 局域网探测器的主要功能 27310.2 基础模块设计 27410.2.1 基础函数 27410.2.2 本地主机类CLocalhost 27710.2.3 设备类CDevice 27910.2.4 子网类CSubnet 27910.3 系统主界面设计 28910.3.1 系统主界面中包含的控件 28910.3.2 设计菜单项 29010.4 加载和退出主界面 29110.4.1 加载主界面的代码实现 29110.4.2 在文本编辑框中输出描述信息 29510.4.3 自动调整控件的大小 29610.4.4 退出系统并保存自定义子网 29710.5 管理子网 29710.5.1 添加和编辑子网 29710.5.2 删除子网 30110.6 扫描指定的子网 30210.6.1 设计执行扫描子网操作的对话框 30310.6.2 启动子网扫描 30510.7 检测子网的状态 30510.7.1 设计检测子网状态的对话框 30610.7.2 启动状态检测 308第11章 设计基于P2P技术的BT下载工具 31011.1 P2P技术的工作原理和应用 31011.1.1 P2P技术的工作原理 31011.1.2 P2P网络模型 31211.1.3 BT下载 31311.1.4 FTKernelAPI兼容BT协议网络内核库 31511.2 系统主界面设计 31711.2.1 系统主界面中包含的控件 31711.2.2 设计菜单项 31811.2.3 设计工具栏 31811.3 加载主窗口 32011.3.1 加载主窗口的代码实现 32111.3.2 在StartContext()函数中初始化FTKernelAPI环境 32211.3.3 在InitNatTunnel()函数中初始化穿透内网的操作 32611.4 实现BT下载 32811.4.1 打开种子文件 32811.4.2 开始下载 33711.4.3 停止下载 34211.4.4 显示下载进度 34311.4.5 删除文件 34711.4.6 打开目录 348
首先必须要看的就是《WINDOWS程序设计》 这本书算是WINDOWS的入门书籍,不过不要怀疑它的难度和枯燥程度,很多人在这第一关就卡死了。
如果你忍了下来,看了三遍左右,知道了WINDOWS是什么了。你可以看候捷老师译的《WINDOWS核心编程》,这本书的出名程度不比第一本差,上面有些例子学会一个足以媲美国内一些叫兽写一本书。精典中的精典,而且候大师翻译的水平相当高,语言通俗易懂,还幽默。呵呵,强荐!!
如果认真看完了上面两本,我毫不夸张的说,你绝对已经是高手了。这时你可以学习一下框架设计。因为你想在编程上有所发展,一定要学会封装。而最好学的,资料最多的就是MFC。虽然很多人说他很烂很烂...
这时你可以看一下《深入浅出MFC》,也是候大师译的,他的出名程度(我都不想说了,精典中的.....精精精典)。你会被他强大的思想所折服.他会教你怎么去建一个功能强大的架构,他会让你有种架构师的感觉...
这个再看完了,我是没啥说的了,你已经快成神了,已经可以自己去悟很多东西了..
祝编程路上一帆风顺
很多人从MFC开始学习,结果常常是一头雾水,知难而退;也有人毅力坚强,熬过了MFC的阵痛期,最后却是知其然而不知其所以然,并且思维被限制在MFC的框架之中,遇到稍微有点规模的程序就无从下手了。
以我个人的这些年的Windows开发经历,我建议Windows上的学习路线如下:
首先当然是语言的学习,比如C或C++(STL),它是平台无关的
然后可以从《Windows程序设计》(by
Charles Petzold
)入门,从最原始的Windows API开始学习
接下来可以学习《Windows核心编程》(by
Jeffrey Richter
), 它会让你比较深刻的理解Windows的前台和后台机制
学完上面2本书,对Windows系统已经比较熟悉了,再要深入的话可以学下《Windows 图形编程》(by 袁锋)。
至此,已经可以用API的方式开发大部分Windows应用程序了,
接下来可以学一些常用库,比如MFC,WTL,ATL等,此时学习MFC和一开始就学习MFC已是截然不同的感觉,彼时痛苦难熬,此时会心一笑。
其他就是根据项目需要,专业知识的学习,比如COM技术,网络,D3D等。