网络IO以及socket编程

代码有订正完善


思考

我们在日常生活中,会遇到如下场景:
1. 微信是怎样收发消息的?
2. 抖音的视频资源是怎么推送到你的app上的?
3. 共享单车是怎样通过手机app开锁的?
4. 在智能家居中,我们又是怎么通过app来操纵空调的?
5. 我们怎样使用git将代码从github/gitee上pull到本地仓库的?
下面我们将带着这些问题来了解网络IO以及socket技术。

网络IO

网络IO(输入/输出)是指在网络环境中数据的传输和接收。以下是网络IO的基本概念和组成。

套接字(socket)

下文中着重去讲。

Client-Server(客户端-服务器模型)

网络通信中最常见的模型。服务器提供服务,客户端请求服务。

数据传输

网络IO涉及数据在客户端和服务器端之间进行传输。
发送数据:程序使用send函数(TCP)或者使用sendto函数(UDP)进行数据传输。
接收数据:程序使用recv函数(TCP)或者使用recvfrom函数(UDP)进行数据传输。

缓冲区(buffer)

缓冲区是临时存储数据的地方,用于处理网络IO。
发送缓冲区:存储即将发送的数据。
接收缓冲区:存储已经接收但尚未被程序处理的数据。

阻塞式IO与非阻塞式IO

阻塞IO:当一个IO操作(如read或write)被调用时,如果操作不能立即完成,调用线程将被阻塞,直到操作完成。
非阻塞IO:即使IO操作不能立即完成,调用线程也不会被阻塞,程序可以继续执行其他任务。

异步IO

异步IO允许程序在等待IO操作完成时继续执行其他任务。当IO操作完成时,程序会收到通知。

多路复用(Multiplexing)

多路复用技术允许单个线程管理多个套接字。
select/poll:监控多个套接字,看是否有任何一个套接字准备好进行IO操作。
epoll:比select/poll更高效的多路复用机制。(Linux特有

并发和并行

并发:多个IO操作在单个线程中轮流执行,给用户多任务同时进行的错觉。
并行:多个IO操作在多个线程或进程中同时执行。

以上内容只是网络IO部分知识,在本文中只是作为了解。

socket

socket是什么?

socket编程是一门技术,主要运用在网络通信中。 这是一句正确的废话。我们需要一些生动的例子。
socket的中文是插座,也不知道为什么要翻译成套接字这么抽象的名词。
源于bing
现在我们就可以将socket技术理解为两台设备连接到“插座”后,通过“插座”进行通信。
源于B站
我们常用的socket的类型是TCP和UDP。我们主要了解TCP。
可以去B站看这个UP的视频

TCP/IP网络通信之Socket编程入门

TCP的三报文握手

第一,TCP是可靠传输协议;第二,TCP是流式传输协议
我们直接看一张图:
tcp三报文连接示意图
可靠传输的目的是我们要尽可能地让接收方接收到发送方发送的数据,因此我们需要向发送方回复确认信息,或者说接收方进行检查。
关于流式传输,举一个例子,发送方发送“hello”,数据回像水流一样传输过去,即h,e,l,l,o会依次发送到接收方。
(抛出一个小问题:TCP第三次握手是否多余?)
到这里,强烈推荐B站UP湖科大教书匠的视频,下面是TCP的三报文握手视频:

5.8.1 TCP的运输连接管理—TCP的连接建立

socket

再回头来看socket技术,我们大概知道了socket是基于TCP/IP上的通信技术,可是它到底位于网络模型的哪个位置(或哪一层)?这个抽象概念已经被人们具体出来了。
socket抽象位置
我们从上图可以清楚地知道,socket抽象层被置于应用层和运输层之间,即socket基于tcp/ip实现。
在这里插入图片描述
上图是在客户端与服务器段使用socket技术时,必须要做的步骤。
我们来看一下,socket通讯的原理:
在这里插入图片描述
这个图对于运用socket进行通讯的解释会更加深刻。

C语言实现TCP服务器

#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值