查看socket缓冲区数据_什么是socket缓冲区?

87e4b51a678db30aa6a8982868d6685d.png

Socket 就是发送和接收网络数据,Socket 有发送缓冲也有接收缓冲,这些缓冲区有什么作用?

1、什么是Socket缓冲区?

熟悉 Socket 的读者都知道,Socket 的发送和接收,就是调用 send 和 recv 函数。

实际操作中,我们将要发送的数据 buffer,送给 send 函数,然后 send 就会返回成功或者失败,那么,send 什么时候返回成功呢?是发送到对端函数才返回吗?答案是否定的。(注意:Socket 有同步和异步,本文主要讨论 Socket 缓冲区,不深究异步,都假定是同步)

实际上呢,Socket 有一个缓冲区,send 的数据 buffer,它会先发到缓冲区里面,然后由操作系统去调度发送。所以,send 返回成功,仅仅只是说明,数据放到缓冲区成功了,不代表对端接收了,更不代表对端应用程序正确处理了。所以我们会看到缓冲区不满的时候,send 函数很快就返回了,而缓冲区满的时候,send 函数会阻塞直到超时返回错误。recv 函数同理,实际上是从缓冲区获取数据,发过来的网络数据,系统将会放到缓冲区里面,直到 recv 函数去获取数据,才取出来,并且释放出空间。稍后我们通过实例来看这些缓冲区。

2、如何查看socket的缓冲区?

Linux 下面查看 Socket 的缓冲区情况非常的简单,就是用 netstat -an 命令,它会列出所有的连接的端口,我们看一下实例

402d928b3d0f0c58352a1ca7a7bd7708.png

这里就指出每个 Active 的连接,主要的元素包括 Proto 协议,上图是 UDP 协议,然后是 RecvQ 和 SendQ,这就是本文讨论的 Socket 缓冲区,一个是接收缓冲,一个是发送缓冲,我们可以实时查看当前的状态。后面是本机 IP 和端口,以及对端的 IP 和端口,最后是连接状态,上图是 UDP 的所有没有状态。

下面我们运行一个 Socket 程序,再看 netstat 状态,来感受一下,

6e5557925b8e7adfad1e9e6d820779a4.png

这个时候我们发现,出现了一个 TCP 的连接,是 SYN 状态,SendQ 是 1,因为发送了一个 syn 包到缓冲区,对端一直连接不上(服务端没开启),所以缓冲区一直是 1。若我们开启服务器端,连接会正常,这时候你再观察,会发现 SendQ 变成 0,我们看一下:

123377f63d9de3f002b707f1c63081c7.png

这时候连接建立了,缓冲区变成 0 了。

3、网络数据发送和接收与缓冲区的关系

通过以上的分析,我们应该已经大致了解了网络数据发送和接收与缓冲区的关系。

总的来说,不管发送还是接收,都要先经过缓冲区,操作系统将会处理缓冲区里面的数据。以发送为例,应用程序提交到缓冲区,就等着系统来处理了,网络不畅通,系统就发不出去,缓冲就会越积越多;接收也是同样情况,系统接收到数据,放缓冲区里面,通知应用程序来获取,应用程序若不及时处理,缓冲就越积越多。

所以缓冲区的大小多少合适呢?

系统给了一个默认值,但是不见得适合所有情况,高速网络可以调大,低速网络可以调小,这个应用程序可以自行灵活控制。

9ee12e4c21ae18e113f4e98db965cd87.pngb2e3b5c182bbcae1c929c9cf5859e8c8.gif

关注琉忆编程库,一起学编程

d2e5c8b238bcf7d129050acaf4f40e2b.png31adde16a28d7c6f387bdbac3a271ff7.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python登录并关注公众号_python微信公众号之关注公众号自动回复

我们知道一旦使用开发者模式,我们就无法使用公众号平台中的自动回复功能,也就是关注自动回复功能只有自己写才可以。如图所示,我们无法直接使用此功能。那么接着上一个博客,我们完成了关键词自动回复功能,博文地址实现…

哈工大大数据实验_科研常用 | 实验大数据分析方法

对于每个科研工作者而言,对实验数据进行处理是在开始论文写作之前十分常见的工作之一。但是,常见的数据分析方法有哪些呢?常用的数据分析方法有:聚类分析、因子分析、相关分析、对应分析、回归分析、方差分析。1、聚类分析(Cluste…

搭建github服务器_搭建一个属于自己的公网博客

相信每一位程序员都喜欢拥有一个属于自己的博客。当然,在我认为,内容以及模块都要自己进行可扩展定义才是真正属于自己的。那么想要一个博客就必须要有一个服务器和一个域名,这样的话才能让自己的博文内容发扬光大,但是服务器的性…

mysql超过1W条查询不显示_mysql 被写入1W数据后无法select*from table,但是加入limit参数后可以查询...

数据库表结构 innodbSELECT 查询错误提示ERROR 2013 (HY000): Lost connection to MySQL server during query我觉得可能是 SELECT 执行时间过长,所以报错.mysql 日志150414 03:11:26 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql150414 3:11:27 In…

python分支结构基础实训_零基础Python教程-分支结构

文章目录下面就让我们先一起学习单分支结构:单分支结构双分支结构多分支结构在日常生活中,我们会遇到很多选择类的问题。比如:午饭吃螺蛳粉还是生煎包?下班回家坐地铁还是公交车?这也就是我们编程语言中常说的“分支结构”,今天…

mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作

1.外键: 用来建立两张表之间的关系- 一对多- 多对多- 一对一研究表与表之间的关系:1.定义一张 员工部门表id, name, gender, dep_name, dep_desc- 将所有数据存放在一张表中的弊端:1.结构不清晰 ---> 不致命2.浪费空间 ---> 不致命3.可扩展性极差 ---> 不可忽视的弊端…

python3 urllib安装_对python3 urllib包与http包的使用详解

urllib包和http包都是面向HTTP协议的。其中urllib主要用于处理 URL,使用urllib操作URL可以像使用和打开本地文件一样地操作。而 http包则实现了对 HTTP协议的封装,是urllib.request模块的底层。1.urllib包简介2. http 包简介1.urllib包简介urllib包主要模…

OpenCV学习笔记 - 使用密集光流检测运动的简单方法

一、简述 使用光流进行运动检测的方法与帧间差分方法类似。主要区别在于第一步,我们将从光流而不是帧差分中获取初始运动信息(一些神经网络模型也是基于光流和原始图像进行运动识别训练的)。 该算法概述如下: 1、计算密集光流 2、获得运动掩模的阈值光流 3、在运动蒙版中查…

mysql 5.6.27安装图解_Linux下MySQL 5.6.27 安装教程

本文实例为大家分享了Linux下MySQL 5.6.27 安装教程,供大家参考,具体内容如下1、下载地址2、将压缩包上传到服务器3、解压tar -zxf mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz4、移动压缩包至mysql文件夹下mp mysql-5.6.27-linux-glibc2.5-x86_64 /usr…

linux部署tomcat项目404_Tomcat部署项目的几种常见方式

点击蓝字“程序员考拉”欢迎关注!1 /直接将web项目文件件拷贝到webapps目录中这是最常用的方式,Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用。如果你想要修改这个默认目录,…

mysql bug_MySQL 记一次 Bug发现过程

水平有限有误请谅解这个问题是一位朋友DBA-老庄的,他们使用的是PXC环境如下:MySQL:5.7.18-15wsrep:29.20os:Red Hat Enterprise Linux Server release 6.5实际上我对PXC并不是很熟,通过分析pstack还是找到了问题。并且提交Bug,percona确认了。虽然我不是…

用python将word文档导入数据库_python读取word文档,插入mysql数据库的示例代码

表格内容如下:1、实现批量导入word文档,取文档标题中的数字作为编号2、除取上面打钩的内容需要匹配出来入库入库,其他内容全部直接入库mysql# wuyanfeng# -*- coding:utf-8 -*-# 读取docx中的文本代码示例import docximport pymysqlimport re…

mysql编程语法_MYSQL语法(一)

数据表准备:CREATE TABLE student3 ( id int, name varchar(20), age int, sex varchar(5), address varchar(100), math int, english int);INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES(1,马云,55,男,杭州,66,78),(2,马化腾,45,女,深圳,98…

python绘制混淆矩阵_如何实现python绘制混淆矩阵?

大家从python基础到如今的入门,想必都对python有一定基础,今天小编给大家带来一个关于python的高阶内容——绘制混淆矩阵,一起来看下吧~介绍:混淆矩阵通过表示正确/不正确标签的计数来表示模型在表格格式中的准确性。计算/绘制混淆…

用python做舆情分析系统_科学网-如何用Python做舆情时间序列可视化?-王树义的博文...

如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧。痛点你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价。从前,你苦恼的是顾客不爱写评价。最近因为餐厅火了&a…

mysql load data outfile_mysql load data infile和into outfile的常规用法:

load data 可以将文件中的数据导入到表中,这种导入方法快速,高效.但是很容易出错,用法也比较复杂。需要额外定定义行分隔符,列分隔符.不同的格式文件,行,列分隔符的表示方式不一样。但是load data 的默认行列分隔符和txt的文件一样,所以为了少出错,最好使用与txt文件导入常规使…

tensorflow python3.6_[教程]Tensorflow + win10 + CPU + Python3.6+ 安装教程

由于各种原因,清华镜像源已经彻底挂掉了,但是目前网上的各种教程基本上都是采取设置清华镜像源来加快下载速度,所以这给小白带来了很大的困扰!这里我将通过合理上网工具来直接下载源镜像。注意:本次教程适用于Win10系统…

正则表达式 任意数字_作为运维还不会正则表达式?赶快看这篇学习一下

概述正则表达式是很多运维薄弱的一项技能。大家很多时候都会觉得正则表达式难记、难学、难用,但不可否认的是正则表达式是一项很重要的技能,所有今天将学习和使用正则表达式时的关键点整理如下,仅供参考。什么是正则表达式?正则表…

vs xaml 语句完成 自动列出成员_数据传输 | mysqldiff/mysqldbcompare 实现 DTLE 自动化测试...

作者:张静文爱可生上海研发中心成员,测试工程师,负责 DMP 以及 DTLE 自动化测试。本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。任务:测试开…

js去el的map_JS中也可以使用JSTL和EL标签

//往上滑是调用分页function Ajax(currPage, pageSize) { // ajax后台交互String currPage,String pageSizevar el, Plist, i;el document.getElementById(thelist);var cancle function(options) {var pattern ${pageContext.request.contextPath}/integralParadise/userIn…