0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析C++基础语法梳理之网络编程中Socket

C语言编程学习基地 ? 来源:C语言编程学习基地 ? 作者: C语言编程 ? 2021-10-26 10:10 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Socket

Linux Socket 编程(不限 Linux)

a9b4f35c-357e-11ec-82a8-dac502259ad0.jpg

Socket 中的 read()、write() 函数

ssize_tread(intfd,void*buf,size_tcount);ssize_twrite(intfd,constvoid*buf,size_tcount);

read()

read 函数是负责从 fd 中读取内容。

当读成功时,read 返回实际所读的字节数。

如果返回的值是 0 表示已经读到文件的结束了,小于 0 表示出现了错误。

如果错误为 EINTR 说明读是由中断引起的;如果是 ECONNREST 表示网络连接出了问题。

write()

write 函数将 buf 中的 nbytes 字节内容写入文件描述符 fd。

成功时返回写的字节数。失败时返回 -1,并设置 errno 变量。

在网络程序中,当我们向套接字文件描述符写时有俩种可能。

(1)write 的返回值大于 0,表示写了部分或者是全部的数据。

(2)返回的值小于 0,此时出现了错误。

如果错误为 EINTR 表示在写的时候出现了中断错误;如果为 EPIPE 表示网络连接出现了问题(对方已经关闭了连接)。

Socket 中 TCP 的三次握手建立连接

我们知道 TCP 建立连接要进行 “三次握手”,即交换三个分组。大致流程如下:

客户端向服务器发送一个 SYN J

服务器向客户端响应一个 SYN K,并对 SYN J 进行确认 ACK J+1

客户端再想服务器发一个确认 ACK K+1

只有就完了三次握手,但是这个三次握手发生在 Socket 的那几个函数中呢?请看下图:

a9c8e056-357e-11ec-82a8-dac502259ad0.png

从图中可以看出:

(1)当客户端调用 connect 时,触发了连接请求,向服务器发送了 SYN J 包,这时 connect 进入阻塞状态;

(2)服务器监听到连接请求,即收到 SYN J 包,调用 accept 函数接收请求向客户端发送 SYN K ,ACK J+1,这时 accept 进入阻塞状态;

(3)客户端收到服务器的 SYN K ,ACK J+1 之后,这时 connect 返回,并对 SYN K 进行确认;

(4)服务器收到 ACK K+1 时,accept 返回,至此三次握手完毕,连接建立。

Socket 中 TCP 的四次握手释放连接

上面介绍了 socket 中 TCP 的三次握手建立过程,及其涉及的 socket 函数。现在我们介绍 socket 中的四次握手释放连接的过程,请看下图:

a9da6f92-357e-11ec-82a8-dac502259ad0.png

图示过程如下:

某个应用进程首先调用 close 主动关闭连接,这时 TCP 发送一个 FIN M;

另一端接收到 FIN M 之后,执行被动关闭,对这个 FIN 进行确认。它的接收也作为文件结束符传递给应用进程,因为 FIN 的接收意味着应用进程在相应的连接上再也接收不到额外数据;

一段时间之后,接收到文件结束符的应用进程调用 close 关闭它的 socket。这导致它的 TCP 也发送一个 FIN N;

接收到这个 FIN 的源发送端 TCP 对它进行确认。

这样每个方向上都有一个 FIN 和 ACK。

————

今天的分享就到这里了,大家要好好学C++哟~

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7268

    浏览量

    92452
  • Socket
    +关注

    关注

    1

    文章

    213

    浏览量

    36079
  • 编程
    +关注

    关注

    88

    文章

    3694

    浏览量

    95571
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1410

    浏览量

    81612
  • 函数
    +关注

    关注

    3

    文章

    4388

    浏览量

    65359
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C++学到什么程度可以找工作?

    、动态规划、贪心算法等)。 3. **操作系统原理**:理解进程与线程、并发控制、同步机制(如互斥锁、信号量等)、进程间通信等概念。 4. **网络编程**:熟悉基于Socket网络
    发表于 03-13 10:19

    Spire.XLS for C++组件说明

    Spire.XLS for C++ 是一款专业的 C++ Excel 组件,可以用在各种 C++ 框架和应用程序。Spire.XLS for C+
    的头像 发表于 01-14 09:40 ?753次阅读
    Spire.XLS for <b class='flag-5'>C++</b>组件说明

    socket 和 UDP 协议的对比

    Socket 定义 Socket 是一个抽象层,它提供了一种方式,使得应用程序能够发送和接收数据。在网络编程
    的头像 发表于 11-12 14:28 ?1046次阅读

    socket 在物联网的应用

    不同的计算机程序在网络中进行通信。它基于TCP/IP协议,提供了一种可靠的、面向连接的通信方式。在物联网Socket使得设备能够发送和接收数据,实现远程控制和监控。 2. Socket
    的头像 发表于 11-12 14:19 ?1282次阅读

    socket 多线程编程实现方法

    在现代网络编程,多线程技术被广泛应用于提高服务器的并发处理能力。Socket编程网络通信的基
    的头像 发表于 11-12 14:16 ?1154次阅读

    socket 发送和接收数据方法

    1. Socket 基本概念 在网络编程socket 是一个通信端点。它允许程序发送和接收数据。根据通信协议的不同,
    的头像 发表于 11-12 14:07 ?2024次阅读

    socket 网络通信协议解析

    通信机制,它允许两个程序(通常位于不同的计算机上)进行双向通信。在网络编程Socket被用来实现客户端和服务器之间的数据交换。一个Socket
    的头像 发表于 11-12 14:04 ?5866次阅读

    socket 编程基础入门

    Socket 编程基础入门 在计算机网络Socket 是一个抽象层,它将网络通信的细节隐藏起
    的头像 发表于 11-12 14:03 ?1254次阅读

    飞凌嵌入式ElfBoard ELF 1板卡-网络编程示例socket编程

    感觉贴近一些socket编程流程socket编程就是套路,很多代码都是可重用的。而且步骤很固定,下面给出一个流程(事实上网络
    发表于 11-11 14:14

    socket在物联网的应用案例

    物联网(IoT)是一个由互联网、传统电信网、传感器网络等多种网络组成的网络,它允许物体与物体、物体与人、人与人之间的智能化交互。在这个过程Soc
    的头像 发表于 11-04 09:17 ?1075次阅读

    socket编程的错误处理技巧

    Socket编程网络编程的基础,它允许程序之间通过TCP/IP协议进行通信。然而,网络通信是不稳定的,可能会遇到各种问题,如
    的头像 发表于 11-01 17:47 ?1707次阅读

    C语言中的socket编程基础

    Socket编程简介 Socket是一种通信机制,允许程序之间进行通信。在C语言中,socket编程
    的头像 发表于 11-01 16:51 ?1440次阅读

    socket连接超时如何处理

    网络编程socket连接超时是一个常见的问题,它可能由多种原因引起,比如网络延迟、服务器负载过高或者客户端请求超时设置过短等。处理
    的头像 发表于 11-01 16:48 ?2728次阅读

    socket编程的阻塞与非阻塞

    网络编程socket 是一个非常重要的概念,它提供了一个抽象层,使得开发者可以不必关心底层的网络通信细节。
    的头像 发表于 11-01 16:13 ?837次阅读

    什么是socket编程 socket与tcp/ip协议的关系

    什么是Socket编程 Socket编程是一种网络编程技术,它允许程序之间进行通信。在计算机科学
    的头像 发表于 11-01 16:01 ?1372次阅读