没有合适的资源?快使用搜索试试~ 我知道了~
C++ socket 编程 详解 详细的分析 解释
资源详情
资源评论
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/6414339/bg1.jpg)
第1章 Visual C++网络编程概述
Visual C++(后面简写为 VC)网络编程是指用户使用 MFC 类库(微软基础类
库)在 VC 编译器中编写程序,以实现网络应用。用户通过 VC 编程实现的网络
软件可以在网络中不同的计算机之间互传文件、图像等信息。本章将向用户介
绍基于 Windows 操作系统的网络编程基础知识,其开发环境是 VC。在 VC 编译
器中,使用 Windows Socket 进行网络程序开发是网络编程中非常重要的一部分。
1.1 网络基础知识
如果用户要进行
VC
网络编程,则必须首先了解计算机网络通信的基本框架
和工作原理。在两台或多台计算机之间进行网络通信时,其通信的双方还必须
遵循相同的通信原则和数据格式。本节将向用户介绍
OSI
七层网络模型、
TCP/
IP
协议以及
C/S
编程模型。
1.1.1 OSI 七层网络模型
OSI
网络模型是一个开放式系统互联的参考模型。通过这个参考模型,用户
可以非常直观地了解网络通信的基本过程和原理。
OSI
参考模型如图
1.1
所示。
图 1.1 OSI 七层网络模型
用户从
OSI
网络模型可以很直观地看到,网络数据从发送方到达接收方的
过程中,数据的流向以及经过的通信层和相应的通信协议。事实上在网络通信
的发送端,其通信数据每到一个通信层,都会被该层协议在数据中添加一个包
头数据。而在接收方恰好相反,数据通过每一层时都会被该层协议剥去相应的
![](https://csdnimg.cn/release/download_crawler_static/6414339/bg2.jpg)
包头数据。用户也可以这样理解,即网络模型中的各层都是对等通信。在
OSI
七层网络模型中,各个网络层都具有各自的功能,如表
1.1
所示。
表1.1 各网络层的功能
协
议
层
名 功
能
概
述
物理硬件层 表示计算机网络中的物理设备。常见的有计算机网卡等
数据链路层 将传输数据进行压缩与加压缩
网络层 将传输数据进行网络传输
数据传输层 进行信息的网络传输
会话层 建立物理网络的连接
表示层 将传输数据以某种格式进行表示
应用层 应用程序接口
注意:在表 1.1 中列出了 OSI 七层网络模型中各层的基本功能概述。用户根据这些基本的
功能概述会对该网络模型有一个比较全面的认识。
1.1.2 TCP/IP 协议
TCP/IP
协议实际上是一个协议簇,其包括了很
多协议。例如,
FTP
(文本传输协议)、
SMTP
(邮
件传输协议)等应用层协议。
TCP/IP
协议的网络模
型只有
4
层,包括数据链路层、网络层、数据传输
层和应用层,如图
1.2
所示。
在
TCP/IP
网络编程模型中,各层的功能如表
1.2
所示。
表1.2 TCP/IP网络协议各层功能
协
议
层
名 功
能
概
述
数据链路层 网卡等网络硬件设备以及驱动程序
网络层
IP
协议等互联协议
数据传输层 为应用程序提供通信方法,通常为
TCP
、
UDP
协议
应用层 负责处理应用程序的实际用于层协议
在数据传输层中,包括了
TCP
和
UDP
协议。其中,
TCP
协议是基于面向连
接的可靠的通信协议。其具有重发机制,即当数据被破坏或者丢失时,发送方
将重发该数据。而
UDP
协议是基于用户数据报协议,属于不可靠连接通信的协
议。例如,当用户使用
UDP
协议发送一条消息时,并不知道该消息是否已经到
达接收方,或者在传输过程中数据已经丢失。但是在即时通信中,
UDP
协议在
对一些对时间要求较高的网络数据传输方面有着重要的
作用。
1.1.3 C/S 编程模型
C/S
编程模型是基于可靠连接的通信模型。在通信的双方必须使用各自的
IP
地址以及端口进行通信。否则,通信过程将无法实现。通常情况下,当用户使
图 1.2 TCP/IP 网络协议模型
![](https://csdnimg.cn/release/download_crawler_static/6414339/bg3.jpg)
用
C/S
模型进行通信时,其通信的任意一方称为客户端,则另一方称为服务器
端。
服务器端等待客户端连接请求的到来,这个过程称为监听过程。通常,服
务器监听功能是在特定的
IP
地址和端口上进行。然后,客户端向服务器发出连
接请求,服务器响应该请求则连接成功。否则,客户端的连接请求失败。
C/S
编程模型如图
1.3
所示。
图 1.3 C/S 编程模型
由于客户端连接服务器时,需要使用服务器的
IP
地址和监听端口号才能完
成连接。所以,服务器的
IP
地址和端口必须是固定的。在这里,向用户介绍部
分协议所使用的端口号码。例如,
HTTP
协议(网页浏览服务)所使用的端口
号为
80
,
FTP
协议(文本传输)所使用的端口号是
21
。
注意:用户在实际编程中,通信双方的连接以及数据通信均是基于 Socket(套接字)进行
的。
1.2 网络编程基础
网络应用程序可以使用
MFC
中封装的套接字类进行编程,也可以使用
Windows API
函数进行程序开发。相比较而言,
MFC
网络编程较简单一点,用
户使用也非常方便。但是,使用
MFC
相关类编程会使用户对网络通信中的基本
原理没有清晰的认识。而使用
Windows API
函数则恰好相反,可以使用户熟悉
网络通信的基本原理。
1.2.1 Sockets 套接字
用户在
Windows
中编写网络通信程序时,需要使用
Windows
Sockets
(
Windows
套接字)。与
Windows
套接字相关的
API
函数称为
Winsock
函数。
![](https://csdnimg.cn/release/download_crawler_static/6414339/bg4.jpg)
在网络通信的双方,均有各自的套接字,并且该套接字与特定的
IP
地址和
端口号相关联。通常,套接字主要有两种类型,分别是流式套接字
(
SOCK_STREAM
)和数据报套接字(
SOCK_DGRAM
)。其中,流式套接字
是专门用于使用
TCP
协议通信的应用程序中,而数据报套接字则是专门用于使
用
UDP
协议进行通信的应用程序中。
1.2.2 网络字节顺序
网络字节顺序是指
TCP/IP
协议中规定的数据传输使用格式,与之相对的字
节顺序是主机字节顺序。网络字节顺序表示首先将数据中最重要的字节进行存
储。例如,当数据
0x358457
使用网络字节顺序进行存储时,该值在内存中的存
放顺序将是
0x35
、
0x84
、
0x57
。因为通信数据可能会在不同的机器之间进行传
输,所以通信数据必须以相同的格式进行整理。只有经过格式处理的通信数据,
才能在不同的机器之间进行传输。
在
Winsock
中,已经提供了相关的函数处理网络字节顺序的相关问题,这
些知识将在第
2
章中具体讲解。
1.3 Windows Sockets 介绍
在
MFC
类库中,几乎封装了
Windows Sockets
的全部功能。在本节中,将
向用户介绍两个主要的套接字相关类,分别是
CAsyncSocket
类和
CSocket
类。
1.3.1 CAsyncSocket 类
在微软基础类库中,
CAsyncSocket
类封装了异步套接字的基本功能。用户
使用该类进行网络数据传输的步骤如下:
(
1
)调用构造函数创建套接字对象。
(
2
)如果创建服务器端套接字,则调用函数
Bind()
绑定本地
IP
和端口,然
后调用函数
Listen()
监听客户端的请求。如果请求到来,则调用函数
Accept()
响
应该请求。如果创建客户端套接字,则直接调用函数
Connect()
连接服务器即可。
(
3
)调用
Send()
等功能函数进行数据传输与处理。
(
4
)关闭或销毁套接字对象。
注意:在 MFC 中,所有类中均有一个变量 m_hWnd 表示该类的实例句柄。
1.3.2 CSocket 类
CSocket
类派生于
CAsyncSocket
类。该类不但具有
CAsyncSocket
类的基本
功能,还具有串行化功能。用户在实际编程中,通过将
CSocket
类与
CSocketFile
类和
CArchive
类一起使用,能够很好地管理数据以及发送数据。用
户使用该类进行网络编程的步骤如下:
![](https://csdnimg.cn/release/download_crawler_static/6414339/bg5.jpg)
(
1
)创建
CSocket
类对象。
(
2
)如果创建服务器端套接字,则调用函数
Bind()
绑定本地
IP
和端口,然
后调用函数
Listen()
监听客户端的请求。如果请求到来,则调用函数
Accept()
响
应该请求。如果创建客户端套接字,则直接调用函数
Connect()
连接服务器即可。
(
3
)创建与
CSocket
类对象相关联的
CSocketFile
类对象。
(
4
)创建与
CSocketFile
类相关联的
CArchive
对象。
(
5
)使用
CArchive
类对象在客户端和服务器之间进行数据传输。
(
6
)关闭或销毁
CSocket
类、
CSocketFile
类和
CArchive
类的
3
个对象。
1.4 小 结
本章向用户介绍了网络编程有关的网络模型、工作原理、网络协议以及在
MFC
中使用相关的类进行网络程序编写步骤。用户通过本章的学习,将对网络
编程的基础知识有一个大致的了解,同时也为后面的实际编程操作打下基础。
如果用户在后面的编程实例中,遇到一些网络编程的基础知识疑问,可以再对
本章进行复习、巩固,以便更好地理解网络编程知识。
第 2 章 网络应用
2.1 网络编程基础
多媒体技术与网络技术的结合,使得网络生活变得多姿多彩。从此,网络生活很迷人;
网络改变了和改变着人们原本的生活方式。姑且认为 是单机的多媒体技术,
一旦融合了网络技术, 更显现了它强大的生命力。本章将着重介绍
技术在网络方面的应用。
网络编程,当然要用到 (套接字)技术。 相关的操作由一
系列 函数来完成,比如
、、、、、、、、 等。调
用这些 函数有一定的先后次序,有些函数的参数还比较复杂,对于开发者来说,不是
很好用。于是,微软的 提供了两个类: 和 ,极大地方便了
功能的使用。这两个类的继承关系如图 !。
剩余38页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![avatar](https://profile-avatar.csdnimg.cn/423a4ee8b7744beba24edac3c35e264c_yao0605054104.jpg!1)
kelly_yao2013
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- iPhone 16是苹果公司在2024年发布的一款重要手机产品,以下是关于iPhone 16的详细介绍: 一、发布与售价 发布
- 深入理解JavaScript中的深拷贝与浅拷贝:实现方法与应用场景
- STD20N06T4-VB一款N-Channel沟道TO252的MOSFET晶体管参数介绍与应用说明
- 黑群晖ds3622 7.1安装
- 在单片机编程中,延时函数是非常基础且常用的功能,用于在程序中产生一定的时间延迟 不同的单片机(如8051、AVR、PIC、STM
- 如何在C++中实现代码性能分析工具集
- openwrt 初学者大礼包
- 串口协议-涂鸦 IoT 开发平台-涂鸦 IoT 开发平台.pdf
- js代码分割js代码分割
- 单片机编程中,延时函数是非常常用的,尤其是在没有操作系统(如RTOS)支持的情况下,用于控制程序的执行速度或等待某些外部事件 延
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
评论0