C++基础语法梳理:网络编程丨Socket

时间:2022-10-09 17:55:45 | 浏览:1265

SocketLinux Socket 编程(不限 Linux)Socket 中的 read()、write() 函数ssize_tread(intfd,void*buf,size_tcount);ssize_twrite(intfd,con

Socket

Linux Socket 编程(不限 Linux)

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 的那几个函数中呢?请看下图:

从图中可以看出:

(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++哟~

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

编程学习视频分享:

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

相关资讯

荆州市网络媒体大V走进经开区 感受企业发展新成就

荆州新闻网消息(记者 肖琦)9月23日下午,荆州市委宣传部、荆州市网信办组织我市重点新媒体、自媒体人参观荆州经开区部分新开工、新投产的大型项目和企业。各位网络媒体大V通过直播、短视频、图文报道等方式全方位、多角度宣传推介荆州经开区。当天,我

安徽含山公安破获特大跨境网络赌博案涉案资金7000余万元

中新网合肥12月25日电(赵强 黄政)赌徒为逃避警方打击专门开发网络赌博APP,涉案资金流水高达7000余万元。记者25日从安徽含山警方获悉,近日,含山警方成功破获一起特大跨境网络赌博案,彻底打掉一个集合软件开发、业务推广、层级代理、开设赌

救救大龄码农!45岁程序员在国务院网站求助精通编程却找不到工作

编辑:桃子【新智元导读】程序员「35岁定律」更像是圈内人的自嘲。近日,一位45岁程序员发帖称,「自己精通各种技术体系,却连个面试机会都没有」。据统计,不论是在国内还是国外,35岁以上的程序员占比最少,尤其在中国仅有9.4%。大龄码农真的如此

世界邮政日:我国建成世界规模最大的邮政快递网络

IT之家 10 月 9 日消息,今日是世界邮政日,今年世界邮政日主题为“邮政守护地球家园”。据国家邮政局网站,党的十八大以来,我国邮政业取得了历史性成就、发生了历史性变革,进入了年快递件量过千亿件、年快递收入上万亿元的新阶段,实现了建制村直

网络推广怎么做?

最近好多企业家朋友来咨询一个企业做好互联网宣传需要怎么去做?今天我们就来浅谈一下具体应该怎么做才能更有效,第一步是要圈地,所谓圈地很简单,就是所谓的网址域名。至于你是中文域名还是英文域名,根据自己的业务范围来进行有效的选择,第二步就是建厂房

网络推广方式有哪些吸引人

网络推广方式有哪些吸引人 【发软文用TM媒介】一篇好的网络推广软文要层层相扣,从抓住不认识的陌生人的眼睛吸引他浏览,到赢得信任,最后让他自愿掏钱购买你的产品,软文发布前要有非常清晰的逻辑结构。一抓一大把的软文发布会吸引别人的注意,先经过你的

如何选择正确的网络推广方式很重要

导语推广方式也不是单一选择,可选择适合自己推广的几个方式,其中用户是基础,关键靠推广,最终还是要看转化。很久没有踏踏实实的写一篇文章了,中午吃饭的时候翻了一翻微信好友列表,占满我前面对话框的都是网络推广运营商,一大串群发广告铺天盖地,什么

如何网络推广?知道网络推广的几个重要方法有哪些吗?

做网络推广要注意的问题,首先对你的公司、产品、目标消费者等先定位,然后才使用合适的的推广方法,而不是看什么就推广什么,不然会很累,也没效益!在此,给大家分享几个我了解的推广重要方法如下:网络推广1. 搜索引擎推广方法 :搜索引擎推广是指利用

友情链接

SEO域名抢注宝宝起名网妈妈知道币圈泰国榴莲资讯网美能能源股票广州交友相亲网冰岛旅游官网美度舵手表阴那山旅游攻略玉石网谢霆锋歌迷网途牛旅游资讯网海澜之家股票生鲜电商网下午茶文化网纪念币收藏网唐诗宋词网乐山新闻头条网
PHP编程知识网-php开源建站系统、PHP程序员网站开发、php编程工具、php菜鸟教程下载、PHP网络编程教学、php网络编程、php工程师、php菜鸟教程数据库、PHP网站开发、PHP精品源码网站、php程序员入门、php零基础入门教程、php源码搭建网站流程、php从入门到精通第2版、php开发简单网站、php制作网站实例、php网站开发实例教程源代码、php中文网破解版、php中文网。
php编程知识 yoceo.cn ©2022-2028版权所有