码迷,mamicode.com
首页 > 编程语言 > 详细

python 网络编程 缓冲和粘包

时间:2018-10-17 22:16:52      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:serve   缓冲区   编程   端口   地址重用   set   发送消息   传输   之间   

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

允许地址重用:在bind IP地址和端口之前加上,# server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 允许(IP地址和端口)地址重用


缓冲区
输入缓冲区 #recv
输出缓冲区 #send

粘包(tcp的两种粘包现象)
1 连续发送小的数据,并且每次发送之间的时间间隔很短(输出缓冲区:两个消息在缓冲区黏在一起了)
原因是TCP为了传输效率,做了一个优化算法(Nagle),减少连续的小包发送(因为每个消息被包裹以后,都会有两个过程:1 组包 2拆包)

2 第一次服务端发送的数据比我客户端设置的一次接收消息的大小要大,那么接收不完,第二次再接收的时候,就会将第一次剩余的消息接收到

粘包的根本原因是因为:双方不知道对方发送消息的大小

解决方案一:
发送消息之前,先计算要发送消息的长度,然后先将消息长度发送过去,对方给你回一个确认收到长度的信息,然后根据接收到的消息长度来修改自己一次接收消息的大小
这个过程多了一次交互

python 网络编程 缓冲和粘包

标签:serve   缓冲区   编程   端口   地址重用   set   发送消息   传输   之间   

原文地址:https://www.cnblogs.com/qq1426794755/p/9807219.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!