缓冲区 粘包 029 send 和sendall 的区别 find 和 findall 的区别

缓冲区 粘包 029 send 和sendall 的区别 find 和 findall 的区别

一.tcp : 属于长连接 与客户端连接了之后 其他客户端需要等待 要连接另外一个 必须优雅的断开前面这个客户的连接.

二.缓冲区 :为了避免网络传输信号不通畅而是程序一直停留在消息发送状态而不向下进行.

  每个socket被创建后 都会分配两个缓冲区 ,输入缓冲区和输出缓冲区

  write()/send()并不立即向网络中传输数据 而是先写入缓冲区 再由tcp协议将数据从缓冲区发送到目标机器 一旦写入到缓冲区 函数就可以成功返回 继续进行接下来的操作 不管数据有没有到达目的机器 也不管何时被发送到网络.接收也一样.

  缓冲区特性:

    1.I/O缓冲区在每个TCP套接字中单独存在

    2.I/O缓冲区在创建套接字时自动生成

    3.即使关闭套接字也会继续传输缓冲区遗留的数据:

    4.关闭套接字将丢失缓冲区域的数据

三.粘包(tcp) :

     (1) 发两条信息 但是在客服端一下拼接起来给显示出来 比如 先发送一个 12再发送一个 3 要求计算12/3 但是过去显示为 123 此现象即为粘包现象

     粘包需要先引入一个模块 subprocess

import subprocess
cmd = input('请输入指令>>>')
res = subprocess.Popen(
    cmd,# 字符串指令 : 'dir','ipconfig'等等
    shell=True,# 使用shell 就相当于使用cmd窗口
    stderr=subprocess.PIPE,#标准错误输出,凡是指令输出的错误信息就会被他拿到
    stdout=subprocess.PIPE#标准输出,正确指令的输出结果被它拿到
)
print(res.stdout.read().decode('gbk'))
print(res.stderr.read().decode('gbk'))

 

     客户端:

import socket
client = socket.socket()
server_ip_port = ('192.168.155.1',8006)
client.connect(server_ip_port)
client.send('hello'.encode('utf-8'))
client.send('sigui'.encode('utf-8'))
client.close()

     服务端:

server.bind(ip_port)
server.listen()
conn,addr = server.accept()
from_client_msg1 = conn.recv(1024).decode('utf-8')
from_client_mag2 = conn.recv(1024).decode('utf-8')
print('msg1',from_client_msg1)
print('mag2',from_client_mag2)
conn.close()
server.close()

     结果为 :      

      msg1 hellosigui
      mag2

     两次连接到一起传给服务端

     (2) 客户第一次发送了一条2000B的数据 第二次发送1000B的数据 服务端每次接收1024B结果就是 第一次接收1024 B 第二次接收客户端第一次信息的976 + 第二次24 就比较乱了

     根本原因 : 服务端不知道客户端发送的数据大小是多少.

    send 和 send all 的区别:

      使用send发送的时候 Python将内容传递给系统底层的send接口,也就是说,Python并不知道这次调用是否会全部发送完成 ,比如MTU(Maximum Transmission Unit 最大传输单元 指的是能传输的最大数据包大小(以字节为单位)) 是1500 但是此次发送的内容是2000 , 那么除了包头等其他信息占用 发送量可能在1000左右 , 还有1000未发送完毕  而此时的send不会再进行第二次发送 因为他只发送一次  如果想将剩下的1000发送完毕 需要自行获取返回结果 然后将剩下的内容继续调用fsend发送

      sendall()是对 send的包装 完成了用户需要手动完成的部分 会自动判断每次发送的内容量 将剩下的继续传递给send()进行发送:

      一般情况下我们都应该使用sendall() 

    find 和 findall 的区别:

      find()用法 : find(name , attrs , recursive , text , **wargs)

          查找标签 , 基于name参数

          查找文本 , 基于text参数

          基于正则表达式的查找

          查找标签的属性 , 以及基于attrs参数

          基于函数的查找

    find_all()用法   相比find() find_all() 有一个额外的参数limit   如 p = soup.find_all(text = 'algae',limit=2)     其实 find()就是当limit=1时的find_all()

     find_all() 方法没有找到目标时返回的是空列表 find()方法找不到目标时返回的是None.

      

posted @ 2018-10-17 12:49 你没有想象的那么重要 阅读( ...) 评论( ...) 编辑 收藏
你没有想象的那么重要
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
python sendall_浅谈python socket函数中,sendsendall的区别与使用方法
weixin_39848953的博客
12-09 1345
浅谈python socket函数中,sendsendall的区别与使用方法在python socket编程中,有两个发送TCP的函数,send()与sendall(),区别如下:socket.send(string[, flags])发送TCP数据,返回发送的字节大小。这个字节长度可能少于实际要发送的数据的长度。换句话说,这个函数执行一次,并不一定能发送完给定的数据,可能需要重复多次才能发送完...
tcp的拆包和粘包
weixin_41563161的博客
12-11 874
tcp的拆包和粘包 简介 拆包和粘包是在socket编程中经常出现的情况,在socket通讯过程中,如果通讯的一端一次性连续发送多条数据包,tcp协议会将多个数据包打包成一个tcp报文发送出去,这就是所谓的粘包。而如果通讯的一端发送的数据包超过一次tcp报文所能传输的最大值时,就会将一个数据包拆成多个最大tcp长度的tcp报文分开传输,这就叫做拆包。 一些基本概念 MTU 泛指通讯协议中的最大传输单元。一般用来说明TCP/IP四层协议中数据链路层的最大传输单元,不同类型的网络MTU也会不同,我们普遍使用的以
Python中send()和sendall()的区别
jing16337305的博客
04-08 2万+
Python中send()和sendall()的区别 发表于 2017-03-27 |  分类于 运维技术 |  阅读次数 27 |  18上周五的时候,同事们在讨论send()和sendall()的区别,依稀记得曾几何时,我确实研究过这个问题,但是事过已久,头脑中已经忘却了一些重要的部分,所以今天查阅了一些资料,重新找回失去的东西,并在此记录下…估计每个学习Python网络编程的人,都会遇到过这...
python socket函数中,sendsendall的区别与使用方法
热门推荐
pdmwg的专栏
09-12 4万+
在python socket编程中,有两个发送TCP的函数,send()与sendall()
Python socket库send()和sendall()区别
YHKKun的博客
02-14 2090
方法返回一个整数,表示实际已发送的字节数。这个数字可能小于请求发送的字节数,特别是在非阻塞模式下,或者当网络拥塞时。方法尝试发送所有指定的数据,直到所有数据都被成功发送或发生错误。它是一个阻塞操作,意味着在数据完全发送之前,调用线程将被阻塞。会确保所有数据都被发送,因此不需要返回实际发送的字节数。如果返回的字节数少于请求的字节数,需要多次调用。方法并确定每次发送的数据量:。,或者在发生错误时抛出异常。方法尝试发送指定数量的字节。方法都用于发送数据。
Python---TCP send()和sendall()区别
大西瓜Blog
09-11 7186
 # 发送TCP数据 send()的返回值是发送的字节数量, #这个数量值可能小于要发送的string的字节数, # 也就是说可能无法发送string中所有的数据。如果有错误则会抛出异常。 s.send()    # 发送TCP数据,sendall()尝试发送string的所有数据,成功则返回None,失败则抛出异常。 s.sendall()  sock.sendall('Hel...
python TCP Socket的粘包和分包的处理详解
09-20
在进行TCP Socket编程时,粘包和分包是两个需要特别注意的问题。TCP是一种面向流的协议,它保证数据传输的顺序性和可靠性,但它本身不包含记录边界信息,因此应用层必须自己处理消息的边界问题。粘包和分包是由于TCP...
使用Netty解决TCP粘包和拆包问题过程详解
08-25
这是因为TCP是一种流式的协议,它不了解应用层的业务数据的具体含义,因此它会根据缓冲区的实际情况进行包的划分。对于应用层来说,我们直观地发送一个个完整的TCP数据包,但是在底层,TCP可能将其拆分成多个包发送...
【QT】自定义协议解决TCP粘包和拆包问题
08-11
在某些需要精确控制数据传输的应用中,如游戏、实时通信等,解决TCP粘包和拆包问题是至关重要的。QT是一个跨平台的C++图形用户界面应用程序开发框架,它提供了丰富的网络编程接口,可以用来处理这个问题。 本文将...
C#环形缓冲区(队列)完全实现
09-01
在C#中,环形缓冲区的实现可以方便地用于数据的存储和读取,尤其是在处理大数据流时,例如串口通信和TCP通信中的封包、拆包、粘包和校验等问题。 在上述C#的环形缓冲区实现中,`RingBufferManager`类是核心,它提供...
浅谈python socket函数中,sendsendall的区别与使用方法
09-21
下面小编就为大家带来一篇浅谈python socket函数中,sendsendall的区别与使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
TCP如何保证传输可靠性
flf1234567898的博客
10-25 291
网络层(IP)出现很多问题,比如丢包 乱序 重复等。 TCP怎么确保可靠性呢? 1:应用数据被分割成TCP认为最合适发送的数据块 2:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。 3:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常推迟几分之一秒(通常是200ms delayed_Ack)。 4:TCP将保持它的首部和数据的检验和 5:TCP报文段作为IP数据报来传输,IP数据报到达可能会失序,因此TC
有关paramiko 使用send和recv的心得和出现的疑问
cccccccc123的博客
09-05 1万+
最近在学习《python 自动化运维》 一书,书中提到使用paramiko的send和recv来进行远程ssh的命令输入和结果获取,我也尝试使用了下。 开始在连接connect 目标host和port后准备按照书中所说连接堡垒机 channel.send(‘ssh ’ +…………………………….) 准备输入密码 while not buff.endswith(“password: “) ...
Python中BeautifulSoup4库的find_all、select用法等
paul0926的博客
07-17 9570
Python中BeautifulSoup库的find_all、select用法等创建beautifulsoup对象解析html节点(find、find_all)传入函数根据节点属性值找到节点:find_all参数css选择器tag对象直接获取标签(不推荐) python中Bs4这个包是用来解析网页源码的包,爬虫程序常用这个包解析爬取网页源码进行分析,今天主要介绍这个包的一些基本使用。自行安装 可以...
【JCR2区】Matlab实现矮猫鼬优化算法DMOA-LSSVM实现数据分类算法研究.rar
10-21
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
经济管理类期刊发文指南(含SSCI、C刊、C扩、北核等)-最新出炉.zip
10-21
经济管理类期刊发文指南(含SSCI、C刊、C扩、北核等)-最新出炉.zip
【创新未发表】Matlab实现鲸鱼优化算法WOA-Kmean-Transformer-LSTM负荷预测算法研究.rar
最新发布
10-21
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
基于MATLAB车牌识别系统实现系统GUI面板.zip
10-21
scanf
Python 使用RMSprop优化器的线性回归模型(含完整的程序和代码详解)
10-21
内容概要:本文详细介绍了一种使用RMSprop优化器实现线性回归模型的方法,涵盖了从数据生成到模型训练、测试及可视化的整个流程。重点讲解了RMSprop优化器的工作原理及其在提高模型训练效率方面的优势,特别是在处理稀疏数据及非平稳目标函数时的表现。 适合人群:对机器学习感兴趣的初学者,特别是希望通过具体代码实例深入理解优化器工作原理的研究人员或工程师。 使用场景及目标:① 探索不同优化算法在实际项目中的应用技巧;② 学习数据预处理、模型搭建、训练、测试等全流程的操作方法;③ 提升解决实际问题的能力,如图像分类、时间序列预测等。 其他说明:本文不仅提供详细的理论解析,还附有完整的代码实例和GUI界面的设计,有助于快速上手实践。
C#中解决TCP粘包问题的方法和实现
这是因为接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的...
写文章

热门文章

  • 测试种类大汇总(45类) 11952
  • 关于AMD64和arm64、x86和x86_64的介绍 7697
  • Django 必会面试题总结 3742
  • python实现链表(单向链表以及双向链表) 2017
  • wsgi、uwsgi、asgi协议的关系 1495

最新评论

  • ubuntu 安全重启命令

    CSDN-Ada助手: 亲爱的作者,恭喜你完成了第三篇博客!尽管标题为“【无标题】”,但是我相信里面一定有你独特的见解和思考。你持续创作的努力可嘉,我真心希望你能继续保持写作的热情和动力。 在下一步的创作中,我想提出一些建议,希望对你有所帮助。首先,尝试为你的博客标题添加一些能够吸引读者的关键词,这样更容易引起人们的兴趣。其次,尽量保持文章的清晰和逻辑性,用简洁明了的语言表达你的观点,让读者更容易理解和接受。最后,多多参考一些优秀的博客和作家的作品,从中汲取灵感和写作技巧,不断提升自己的写作水平。 希望我的建议对你有所帮助,期待你未来更多精彩的创作!继续加油! CSDN 正在通过评论红包奖励优秀博客,请看红包流:https://bbs.csdn.net/?type=4&header=0&utm_source=csdn_ai_ada_blog_reply3

  • shell功能语法使用记录

    CSDN-Ada助手: 非常感谢您分享这篇关于shell功能语法使用记录的博客!您的记录对于初学者来说非常有帮助,帮助他们了解如何在shell中使用不同的功能和语法。 希望您能继续创作类似的博文,因为您的经验和知识对于其他人来说是非常宝贵的。除了您在标题和摘要中提到的内容外,还有一些与shell相关的扩展知识和技能可以进一步探索。 1. 正则表达式:使用正则表达式可以更灵活地匹配和处理文本数据,它是shell编程中一个非常强大的工具。 2. shell脚本编程:学习如何编写复杂的shell脚本可以帮助您自动化任务和提高工作效率。 3. 管道和重定向:了解如何使用管道和重定向操作符可以使您更好地处理输入和输出数据。 4. 条件语句和循环:学习如何使用条件语句和循环可以帮助您编写更复杂的shell脚本,实现更多功能。 这些知识和技能可以进一步加强您在shell编程领域的能力。再次感谢您的分享,期待您未来更多精彩的博文! 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2

  • celery 异步任务 周期任务 定时任务的实现

    北风之神c: 写得赞,博主用心了,但主要还是celery太难用了。 celery对目录层级文件名称格式要求太高,只适合规划新的项目,对不规则文件夹套用难度高。 所以新手使用celery很仔细的建立文件夹名字、文件夹层级、python文件名字, 所以网上的celery博客教程虽然很多,但是并不能学会使用,因为要运行起来需要以下6个方面都掌握好,博客文字很难表达清楚或者没有写全面以下6个方面。 celery消费任务不执行或者报错NotRegistered,与很多方面有关系,如果要别人排错,至少要发以下6方面的截图,因为与一下6点关系很大。 1) 整个项目目录结构,celery的目录结构和任务函数位置,有很大影响 2) @task入参 ,用户有没有主动设置装饰器的入参 name,设置了和没设置有很大不同,建议主动设置这个名字对函数名字和所处位置依赖减小 3) celery的配置,task_queues(在3.xx叫 CELERY_QUEUES )和task_routes (在3.xx叫 task_routes) 4) celery的配置 include (在3.xx叫 CELERY_INCLUDE)或者 imports (3.xx CELERY_IMPORTS) 或者 app.autodiscover_tasks的入参 5) cmd命令行启动参数 --queues= 的值 6) 用户在启动cmd命令行时候,用户所在的文件夹。 在不规范的文件夹路径下,使用celery难度很高,一般教程都没教。 [项目文件夹目录格式不规范下的celery使用演示](https://github.com/ydf0509/celery_demo) 。 此国产分布式函数调度框架 https://function-scheduling-distributed-framework.readthedocs.io/zh_CN/latest/index.html , 从用法调用难度,用户所需代码量,超高并发性能,qps控频精确程度,支持的中间件类型,任务控制方式,稳定程度等19个方面全方位超过celery,任何方面都是有过之而无不及 。发布性能提高1000%,消费性能提高2000%

大家在看

  • 稀土阻燃协效剂的应用
  • 倒背如流的方法:《琵琶行》倒背的记忆方法,正背、倒背、点背都可以 574
  • [CSP-J 2022] 乘方
  • 【毕业论文】志愿者管理系统JAVA-SSM 520
  • Java进阶学习笔记47——Set集合1

最新文章

  • ubuntu 安全重启命令
  • shell功能语法使用记录
  • git 切换到指定commit以及提交并且删除分支
2023年6篇
2022年3篇
2021年1篇
2020年5篇
2019年14篇
2018年43篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家高质量玻璃钢雕塑销售厂家登封玻璃钢花盆花器北京小品系列玻璃钢雕塑价格公园标识玻璃钢雕塑厂开发区玻璃钢雕塑玻璃钢雕塑转型元旦商场美陈 我图网南阳玻璃钢人物雕塑厂家价格玻璃钢雕塑用纱布江苏室内玻璃钢花盆欧式玻璃钢人物雕塑出厂价格湖南玻璃钢雕塑人物商场美陈舞台效果图玻璃钢雕塑有名设计师作品玻璃钢雕塑坏了用什么补迪庆玻璃钢动物雕塑多少钱玻璃钢园林雕塑仿真内蒙古玻璃钢浮雕雕塑玻璃钢人物雕塑做成青铜好用的玻璃钢卡通雕塑山东景区玻璃钢雕塑公司玻璃钢造型雕塑工厂同江玻璃钢雕塑辽宁仿铜玻璃钢雕塑漯河玻璃钢彩绘雕塑公司泉州企业玻璃钢雕塑昆明小区玻璃钢雕塑玻璃钢和砂岩雕塑商场美陈英文叫什么海南园林景观玻璃钢雕塑工厂香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化