TCP/IP网络编程项目式教程(微课版)_tcp/ip网络编程项目式教程唐四薪-程序员宅基地

技术标签: 项目式  网络编程  VC  Socket  教程  

TCP/IP网络编程项目式教程(微课版)是由唐四薪编著、清华大学出版社于2019年11月出版的图书。

本书按照问题驱动、由浅入深的理念,以项目实例的形式介绍基于Visual C++的TCP/IP WinSock编程方法。

本书是微课版,提供了20个微课配套视频,在Visual Studio 2010环境中对书中的关键内容进行了演示和讲解,扫描书中相应位置的二维码即可观看。

TCP/IP网络编程项目式教程
TCP/IP网络编程项目式教程

 

 

书    名:

TCP/IP网络编程项目式教程

作    者

唐四薪

ISBN

9787302536840

页    数

222

定    价

39

出版社

清华大学出版社

出版时间

2019年11月

全书共分13章,以项目实例的形式阐述了:网络编程概述、控制台版的TCP通信程序、Windows API版本的TCP通信程序、异步通信版的TCP通信程序、UDP通信程序、MFC版的TCP通信程序、文件传输程序、网络用户登录程序,TCP一对多通信程序、群聊软件、在线考试系统。

本书适合作为高等院校各专业“网络编程”等课程的教材,也可作为网络编程的培训类教材,还可供网络编程开发人员参考使用。

前言

 

TCP/IP 网络编程(俗称Socket编程),是针对TCP/IP层协议(如TCP、UDP)进行的网络编程。这是一种最传统的网络编程方式,许多互联网早期诞生的网络软件,如QQ、Foxmail都是依赖于Socket编程技术开发出来的。

相对于基于应用层协议(如HTTP)的Web编程来说,TCP/IP 网络编程由于是在更底层协议上进行编程,必须编程实现创建套接字、监听、建立连接等前期步骤后才能进行网络通信,而Web编程却能依靠HTTP协议直接收发数据,因此,TCP/IP 编程的入门难度明显比Web编程要大得多。同时,TCP/IP 网络编程主要用于开发C/S结构或P2P结构的软件,这类软件需要开发Windows界面,很多时候还会涉及到多线程编程,以及线程之间参数的传递,因此,TCP/IP 网络程序通常是网络通信的代码与Windows界面代码及多线程处理的代码混杂在一起,这无疑也增加了这种网络编程的学习难度。

TCP/IP 网络编程相对于当今的Web编程来说虽然属于冷门,但其实际应用领域还是很多的,并且有些应用具有不可替代性(比如工控软件,物联网通信软件等)。随着物联网技术的普及,TCP/IP 网络编程必将再次变得重要起来。以慕课网为例,关于Socket技术的相关课程多达9门,并且指出“掌握了Socket技术,就等于掌握了推送、IM、物联网等领域的命脉”,“学习本课程后物联网相关通信工作不再是难题,且你有能力成为物联网协议的制定者”。这足以说明学习TCP/IP 网络编程大有可为。

目前市场上有很多网络编程的教材,其定位大都是基于学习者已经很好地掌握了VC/MFC编程。但实际情况是,很多学生只有C语言和面向对象编程的基础知识,几乎还不具备任何Windows程序开发的知识和经验,程序编写能力不足,本书正是为了帮助这类读者快速掌握Socket编程技术而编写的。在内容编排时,注重解决以下几方面的问题。

(1)分散难点,由浅入深,问题驱动。比如:在程序类型上,按照“控制台程序→Windows API程序→MFC程序”的步骤组织案例,在开发技术上,按照“TCP一对一同步通信→TCP异步通信→TCP一对多通信→Select模型一对多通信→完成端口模型”。这样,就将Socket编程的难点“WinSock五种I/O模型”分散到了不同的章节实例中讲解。

(2)本书大部分案例程序都是Windows界面程序,这样有利于提高学生的学习兴趣,并且能让学生掌握如何将控制台程序转换成Windows界面程序,这是很有实用价值的。

(3)考虑到很多同学VC编程基础不好,在介绍网络程序之前,先介绍一些预备程序的编写。Socket编程的另一个难点是很多程序都不可避免地涉及到多线程,本书将多线程编程也分散安排在后面几章的几个实例中讲解。

(4)摒弃了用WinSock编程制作浏览器、FTP客户端和电子邮件客户端等内容,因为这些软件已经有很多现成的,完全不需要自己去开发,已没有多少实用价值,且不能让学生产生学习兴趣。而是安排了群聊软件、网络用户登录系统、在线考试系统等实用价值很大且有趣味性的案例。

虽然目前TCP/IP 网络编程的语言有C++、Java、Python等,但Java、Python等语言都对网络编程的核心WinSock函数进行了封装,而C++的Win32 API可直接使用WinSock函数进行编程,这样更有利于学生理解Socket编程的底层实现细节,是纯正的Socket编程,学生学会后,不需要多少修改,就能适应Linux、Unix等环境的网络编程,且C++语言效率更高,适合物联网、工控软件的开发。基于此,本书采用C++语言作为网络编程的实现语言,同时为了帮助读者融会贯通,本书在附录中介绍了使用Python和Java制作基本的TCP通信程序。

本书为使用本书作为教材的教师提供教学用多媒体课件、实例源文件和习题参考答案,可登录清华大学出版社网站免费下载,也可访问本书在超星网的配套课程网站 [1]  ,或者和作者联系。

目录

 

项目1 网络编程的实现原理 1

1.1 网络程序的类型与应用领域 1

1.1.1 网络程序的类型 1

1.1.2 网络程序的应用领域 2

1.2 套接字及其种类 4

1.2.1 什么是套接字 4

1.2.2 套接字的类型 6

1.2.3 网络字节顺序 6

1.3 VC编程基础知识 7

1.3.1 VC字符串处理函数 7

1.3.2 VC中新增的数据类型 9

习题 10

项目2 控制台版本的TCP通信程序 10

2.1 套接字编程基础 10

2.1.1 套接字编程步骤 11

2.1.2 套接字编程的准备工作 12

2.1.3 套接字编程中使用的函数 13

2.1.4 套接字建立连接与TCP三次握手 16

2.2 最基本的TCP通信程序 16

2.2.1服务器端程序的制作 17

2.2.2 客户端程序的制作 18

2.2.3 Winsock的错误处理 20

2.3 UNIX Socket编程 20

习题 21

项目3 Win32 API网络通信程序 22

3.1 Windows对话框程序 22

3.1.1 新建对话框程序 22

3.1.2 处理Windows消息 26

3.1.3 获取和设置控件的内容 27

3.2 Windows API程序示例 28

3.2.1 计算器程序 28

3.2.2 获取主机名、IP和时间的程序 30

3.3 Win32 API版本的TCP通信程序 32

3.3.1 控制台程序改造成Windows程序的方法 32

3.3.2 服务器端程序制作步骤 33

3.3.3 客户端程序制作步骤 36

习题 38

项目4 异步通信版的TCP通信程序 38

4.1 阻塞与非阻塞模式 39

4.1.1 引起阻塞的WinSock函数 39

4.1.2 异步I/O模型 39

4.1.3 WSAAsyncSelect模型 40

4.2 异步通信的TCP程序实例 42

4.2.1 服务器端程序制作步骤 42

4.2.2 客户端程序制作步骤 45

习题 47

项目5 UDP通信程序 48

5.1 UDP通信程序的原理 48

5.1.1 UDP协议的通信模式 49

5.1.2UDP的数据收发函数 51

5.2控制台版本的UDP C/S通信程序 52

5.2.1服务器端程序的制作 52

5.2.2 客户端程序的制作 53

5.3 异步P2P UDP通信程序 54

5.4 UDP广播消息的程序 58

5.4.1 设置套接字选项 58

5.4.2 UDP广播程序的制作 59

习题 63

项目6 MFC网络编程 64

6.1 MFC概述 64

6.1.1 MFC的类库 64

6.1.2 MFC程序的结构 65

6.2 MFC版本的计算器程序 67

6.2.1 设置成员变量 67

6.2.2 编写代码 68

6.2.3 在VS2010中新建MFC程序 69

6.3 MFC WinSock版的TCP通信程序 71

6.3.1 服务器端程序的制作 71

6.3.2 客户端程序的制作 75

习题 78

项目7 使用CSocket类和CAsyncSocket类 78

7.1 MFC Socket编程基础 78

7.1.1 CAsyncSocket类的函数 79

7.1.2 CAsyncSocket类编程的步骤 81

7.2 CSocket版本的TCP通信程序 81

7.2.1 服务器端程序制作步骤 81

7.2.2 客户端程序制作步骤 84

7.3 CAsyncSocket版本的TCP通信程序 86

7.3.1 服务器端程序的制作 87

7.3.2 客户端程序的制作 90

习题 93

项目8 TCP文件传输程序 93

8.1 控制台版的TCP文件传输程序 94

8.1.1 服务器端程序的制作 94

8.1.2 客户端程序的制作 96

8.2 CFile和CFileDialog类 97

8.2.1 CFile文件类的使用 98

8.2.2 CFileDialog文件类的使用 99

8.2.3 使用CFile和CFileDialog类制作记事本 100

8.3 MFC版本的文件传输程序 101

8.3.1文件传输程序的流程 102

8.3.2服务器端程序制作步骤 103

8.3.3 客户端程序制作步骤 106

习题 110

项目9 网络用户登录程序 110

9.1 MFC访问数据库 111

9.1.1访问数据库的原理 111

9.1.2 ADO访问数据库示例程序 112

9.2 单机版用户登录程序 114

9.2.1 程序制作步骤 115

9.2.2 查询数据库的实现 117

9.2.3 在登录对话框与主界面之间传递变量 119

9.3 网络版用户登录程序 120

9.3.1 客户端程序的制作 121

9.3.2 服务器端程序的制作 124

习题 127

项目10 TCP一对多通信程序 127

10.1 多线程程序的作用 127

10.1.1 进程与线程 127

10.1.2 创建线程的步骤 128

10.2 控制台版多线程TCP通信程序 129

10.2.1服务器端程序的原理 130

10.2.2服务器端程序制作步骤 131

10.3 MFC版多线程TCP通信程序 132

10.3.1程序的实现原理 133

10.3.2 服务器端程序制作步骤 134

习题 138

项目11 使用select模型实现一对多通信 138

11.1 Select模型基础 138

11.1.1 Select模型的集合与事件 138

11.1.2 select模型编程的步骤 139

11.2 群聊软件 140

11.2.1 群聊软件的实现原理 140

11.2.2 服务器端程序的制作步骤 142

11.3 服务器远程监控系统 146

习题 148

项目12 在线考试系统 148

12.1 重叠I/O模型 149

12.1.1 WSAOVERLAPPED结构体 149

12.1.2 重叠I/O模型的相关函数 150

12.1.3 重叠I/O模型的编程框架 152

12.1.4 基于重叠I/O的TCP通信程序 153

12.2 完成端口模型 156

12.2.1 使用完成端口的编程流程 156

12.2.2 在线考试系统的设计 157

习题 160

项目13 网络嗅探软件 160

13.1 原始套接字概述 161

13.1.1 创建原始套接字 161

13.1.2 使用原始套接字收发数据 162

13.2 制作网络嗅探软件 162

13.2.1 网络嗅探软件的原理 162

13.2.2 网络嗅探软件的制作 163

习题 164

附录A Python版的TCP通信程序 165

附录B Java版的TCP通信程序 166

参考文献 168

本书提供了VC6和VS2010两种版本的源程序代码,ppt课件、试卷、教学大纲、考试大纲、实验指导书等配套资源。其中,试卷、教学大纲、实验指导书等只提供给选用本教材的教师。 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wuxia2118/article/details/103222093

智能推荐

[UE4]UMG widget Property Binding(属性绑定),事件触发蓝图函数和C++函数-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏3次。假如用UMG绘制了一个button类型的widget,然后我们想让这个button的状态变化与相关属性或者函数绑定,则参考官方的文档如下: Property Binding(如何绑定蓝图属性和蓝图函数)https://docs.unrealengine.com/latest/INT/Engine/UMG/UserGuide/PropertyBinding/index.htmlH..._binding: property ' /script/umg.widget:visibilitydelegate ' on widget ' butt

音视频系列1:流媒体_hds akamai-程序员宅基地

文章浏览阅读1.3k次。1. 使用vlc,自带server安装好vlc软件,然后用如下命令起流Applications/VLC.app/Contents/MacOS/VLC -vvv test.264 –sout ‘#rtp{sdp=rtsp://:5544/test}’;vlc会自动创建server,不错哦。2. 使用ffmpeg,nginx做server参考这里mac貌似自带ffmpeg,没有的话就安装一个,然后ffmpeg -re -i test.mp4 -vcodec copy -codec copy -_hds akamai

pytorch 之 nn.BatchNorm2d(oup)( 100 )_batchnorm2d(100)-程序员宅基地

文章浏览阅读2w次,点赞2次,收藏9次。先看看解释。。。。。然后。。。我的疑惑在于:网络片段:nn.Conv2d(inp, oup, 3, stride, 1, bias=False),nn.BatchNorm2d(oup),nn.ReLU(inplace=True),我打印model的parameters来查看参数:打印的为:0.conv.0.weight : torch.Size([32, 3, 3, 3])0.conv.1...._batchnorm2d(100)

MATLAB 画图,对数坐标轴_matlab 对数轴-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏23次。对数坐标轴_matlab 对数轴

迟到的第一篇博客-程序员宅基地

文章浏览阅读194次。其实很早之前就一直在使用CSDN论坛查阅资料,学习新知识。但是直到2019年下旬才注册了账号,当时是因为每天看到不同的大牛博主更新的博文点燃了我的创作激情(毕竟我初中时做过语文课代表),结果注册了账号之后因为工作比较忙碌,也就没有维护。(当初的豪言壮语早被抛掷脑后)先说说自己的情况吧,本人,男,老家来自陕西渭南(谁在说我们渭南没程序猿我跟谁急),之前的专业是法律事务,至于为什么会踏上程序猿这条不归路我以后还会再讲,现在在北京北漂工作一年多了,目前刚刚从上家公司跳槽,现在在一家私企做linux系统开发。因为

PIC18F47K42 初学篇-1_pic18f46k40 学习-程序员宅基地

文章浏览阅读795次。5月1日开始学习PIC18系列单片机,之前一直用MSP430的16位单片机,技能总是太单一,稳定性不是很好。决定回到8位PIC来看看,从PIC18F47K42开始吧,有一个小红板方便开始学习,配合官网资料、手把手教你学PIC单片机、PIC微控制器项目设计。书本主要是加速作用,并没有推荐意义。MPLAB X IDE应该来说还是很不错,就是占用内存太多,运行时硬盘咳咳作响。MCC配置功能还..._pic18f46k40 学习

随便推点

PoseCNN: A Convolutional Neural Network for 6D Object Pose Estimation in Cluttered Scenes—2017(笔记)-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏7次。PoseCNN:用卷积神经网络估计杂乱场景中目标6D姿态—2017(笔记)文章提出了新的PoseCNN姿态估计网络,通过CNN提取图像特征,然后分三路进行目标分割标签标注、平移估计和姿态估计得到目标6D姿态,其中通过应用新型损失函数,能够较好地估计对称目标。 ----------------- Occlusion、symmetric object、only RGB摘要..._posecnn: a convolutional neural network for 6d object pose estimation in clu

Bootstrap(三): form表单_bootstrap3 form-程序员宅基地

文章浏览阅读9.3k次。 Bootstrap(二): 栅格系统点击打开链接如果和表单熟悉结课起来用会有非常强大的功能,网上对于bootstrap的学习资源很多,表单作为一个学习重点,很多大佬在自己的博客中都分享了自己对表单的理解,在这里我推荐一篇自己认为关于bootstrap表单学习写得很详细的文章:http://www.cnblogs.com/sankexin/p/5509955.html点击打开链接 ..._bootstrap3 form

Ucenter后台登陆 验证码CCCC的解决方法 无法登录解决办法_/uccp-server/login?appcode=&service=http%3a%2-程序员宅基地

文章浏览阅读198次。Ucenter后台登陆 验证码CCCC的解决方法 无法登录解决办法_/uccp-server/login?appcode=&service=http%3a%2

zabbix监控硬件及服务(详解)一_zabbix监控服务器硬件-程序员宅基地

文章浏览阅读2.8w次,点赞22次,收藏111次。大家好今天给大家带来zabbix3.4.8监控主机,那么最近由于我个人的关系。没有及时的更新文章所以,很抱歉那么今天我分享的内容是zabbix3.4.8监控服务器。本章的具体监控服务器如下:服务器的CPU使用率 服务器的硬盘挂载使用率 服务器的网卡流量流入流出使用率 服务器的用户登录终端数量 Web服务器状态码检测那么本章主要就是监控这几个方面。搭建环境流程安装c..._zabbix监控服务器硬件

php乘方开根号,JavaScript_教你JS中的运算符乘方、开方及变量格式转换,1)如何计算乘方 题一:3的4 - phpStudy...-程序员宅基地

文章浏览阅读211次。教你JS中的运算符乘方、开方及变量格式转换1)如何计算乘方题一:3的4次方(不会打,请原谅 ==!!!)3的4次方=3*3*3*3var a = Math.pow(3,4);console.log(a);说明:Math.pow()是用来计算乘方的语法注意:Math的M是大写;题二:3的4*5次方var a =Math.pow(3,4*5);console.log(a);2)如何计算根号题目:根号8..._php有根号运算符吗

java枚举 取值_秒懂系列,超详细Java枚举教程!!!-程序员宅基地

文章浏览阅读4.6k次。深入理解Java枚举一、什么是枚举1.1 什么是枚举?至于枚举,我们先拿生活中的枚举来入手,然后再引申Java中的枚举,其实它们的意义很相似。谈到生活中的枚举,假如我们在玩掷骰子的游戏,在我们手中有两个骰子,要求掷出两个骰子的点数和必须大于6的概率,那么在此情此景,我们就需要使用枚举法一一列举出骰子点数的所有可能,然后根据列举出来的可能,求出概率。可能有的小伙伴发现,这就是数学啊?这就是数学中的概..._枚举取值