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 中的四次握手释放连接的过程,请看下图:

图示过程如下:

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

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

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

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

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

————

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

责任编辑:haq

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

    关注

    87

    文章

    10988

    浏览量

    206725
  • 编程
    +关注

    关注

    88

    文章

    3440

    浏览量

    92381
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72899

原文标题:C++基础语法梳理:网络编程丨Socket

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    鸿蒙原生应用开发-网络管理Socket连接(一)

    一、简介 Socket连接主要是通过Socket进行数据传输,支持TCP/UDP/TLS协议。 二、基本概念 Socket:套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端
    发表于 04-01 14:20

    鸿蒙开发实战:【网络管理-Socket连接】

    Socket网络通信方面的应用,展示了Socket在两端设备的连接验证、聊天通信方面的应用。
    的头像 发表于 03-19 22:04 226次阅读
    鸿蒙开发实战:【<b class='flag-5'>网络</b>管理-<b class='flag-5'>Socket</b>连接】

    物联网LWIP之socket编程

    一,基础概念在我看来Socket就相当于API,就是函数接口,我们使用Socket就可以在不清楚底层原理的基础上进行通信,即Socket会帮助我们处理好网络的Ip地址等。下图就清晰地展
    的头像 发表于 01-18 08:00 552次阅读
    物联网LWIP之<b class='flag-5'>socket</b><b class='flag-5'>编程</b>

    常见的socket三种类型

    常见的socket三种类型  Socket是计算机网络中常用的通信机制,在网络编程中起到了非常重要的作用。
    的头像 发表于 12-08 11:18 1712次阅读

    c++怎么开始编程

    应用程序、嵌入式系统和网络应用程序等各种领域。 在开始编程之前,你需要安装C++编程环境。首先,你需要下载并安装一个编译器,比如微软的Visual Studio、GNU的GCC或者C
    的头像 发表于 11-27 15:56 492次阅读

    socket、端口、进程的关系

    特定的TCP端口。 而 socket 呢,是网络编程中的概念,对TCP/IP协议进行了抽象和实现,并为应用层提供接口。这里的应用A,可以是FTP应用,它属于用户进程,通过socket
    的头像 发表于 11-10 15:02 271次阅读
    <b class='flag-5'>socket</b>、端口、进程的关系

    Socket 网络编程框架介绍

    Socket 网络编程框架 Socket(套接字)是一个网络编程概念,描述了一个通信端点(End
    的头像 发表于 11-09 14:19 337次阅读
    <b class='flag-5'>Socket</b> <b class='flag-5'>网络</b><b class='flag-5'>编程</b>框架<b class='flag-5'>介绍</b>

    Linux C/C++编程中的内存泄漏问题

    ,需要对各种编程语言和技术有深入的理解。而C++,作为一种高性能的编程语言,在许多领域(如网络编程、嵌入式系统、音视频处理等)都发挥着不可忽
    的头像 发表于 11-09 10:11 385次阅读
    Linux C/<b class='flag-5'>C++</b><b class='flag-5'>编程</b>中的内存泄漏问题

    单片机编程语言可以用c++吗?

    单片机编程语言可以用c++吗?
    发表于 11-09 06:40

    高质量CC++编程指南

    林锐-高质量CC++编程指南电子档
    发表于 10-07 07:14

    嵌入式C/C++语言精华文章集锦

    面对一个人的大型 C/C++程序时,只看其对 struct 的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的 C/C++程序
    发表于 09-25 08:00

    如何为原生C++开发设置Android Studio

    在本指南中,我们将介绍如何为原生C++开发设置Android Studio,并了解如何将Neon内部功能用于ARM支持的移动设备。 不要重复自己(Dry)是软件开发的主要原则之一。 遵循这一原则通常
    发表于 08-17 08:28

    如何为Arm编译Cc++代码

    C++源代码翻译成机器代码的编译器。 •将汇编语言源代码翻译成机器代码的汇编程序。 •一个链接器,用于将多个机器代码模块组合成一个可执行文件。 可用的工具链包括: •Arm编译器6。基于armclang
    发表于 08-02 17:28

    虹科工业树莓派的Socket通信之旅:探索智能工业应用的无限可能

    Socket通信是一种网络通信协议,在网络编程中应用广泛。本文为大家介绍虹科工业树莓派结合Socket
    的头像 发表于 06-06 17:41 347次阅读
    虹科工业树莓派的<b class='flag-5'>Socket</b>通信之旅:探索智能工业应用的无限可能

    基于Socket的UDP和TCP编程解析 1

    TCP(传输控制协议)和UDP(用户数据报协议是网络体系结TCP/IP模型中传输层一层中的两个不同的通信协议。 TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节
    的头像 发表于 05-18 17:22 729次阅读
    基于<b class='flag-5'>Socket</b>的UDP和TCP<b class='flag-5'>编程</b>解析 1