导语:
本文主要介绍了关于python如何解决黏包问题的相关知识,包括python爬虫用什么包,以及python map reduce filter这些编程知识,希望对大家有参考作用。
1、了解发送数据的大小,设置接收数据的大小,这样才能准确接收到所有的数据。粘包问题是由于tcp的优化算法将两个不太大的数据包组合在一起发送。
这种情况通常发生在连续使用几个send()时。
这是远程执行cmd命令并返回结果的程序
server端代码
import struct
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
conn,addr = sk.accept()
while True:
cmd = input('>>>')
conn.send(bytes(cmd,encoding='utf-8'))
num = conn.recv(1024).decode('utf-8') #接收client端计算好的数据长度
conn.send(bytes('ok',encoding='utf-8'))
#发送一个确认防止发送num的时候跟后面的send内容合并了
ret = conn.recv(num)
print(ret.decode('gbk'))
conn.close()
sk.close()
2、使用struct模块解决粘合现象。
server端代码
#tcp黏包现象的解决 struct
import struct
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
conn,addr = sk.accept()
while True:
cmd = input('>>>')
conn.send(bytes(cmd,encoding='utf-8'))
# num = conn.recv(1024).decode('utf-8')
num = conn.recv(1024) #接收数据
num = struct.unpack('i',num)[0]#进行解包,解包的结果是一个元组类型取第一个数据
# conn.send(bytes('ok',encoding='utf-8'))
ret = conn.recv(num)
print(ret.decode('gbk'))
conn.close()
sk.close()
本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何在centos中安装python ide?12/15
- ♥ itertools 如何在一行中处理 python3 代码?12/14
- ♥ python中双引号和单引号有什么区别08/27
- ♥ Python进程的串行和并行10/28
- ♥ Python模块学习 ---- glob模块01/06
- ♥ 如何在 Python 中编写复数10/05
内容反馈