python 基于tcp协议的文件传输3_解决粘包问题

server

import jsonimport structimport socket# 接收sk = socket.socket()sk.bind((‘127.0.0.1‘,9001))sk.listen()

conn,_ =sk.accept()msg_len = conn.recv(4)dic_len = struct.unpack(‘i‘,msg_len)[0]msg = conn.recv(dic_len).decode(‘utf-8‘)msg = json.loads(msg)

with open(msg[‘filename‘],‘wb‘) as f:    while msg[‘filesize‘] > 0:        content = conn.recv(1024)        msg[‘filesize‘] -= len(content)        f.write(content)conn.close()sk.close()

client
import osimport jsonimport structimport socket# 发送sk = socket.socket()# sk.connect((‘192.168.14.109‘,9012))sk.connect((‘127.0.0.1‘,9001))

# 文件名\文件大小abs_path = r‘D:\python22期\day28 课上视频\3.网络基础概念.mp4‘filename = os.path.basename(abs_path)filesize = os.path.getsize(abs_path)dic = {‘filename‘:filename,‘filesize‘:filesize}str_dic = json.dumps(dic)b_dic = str_dic.encode(‘utf-8‘)mlen = struct.pack(‘i‘,len(b_dic))sk.send(mlen)   # 4个字节 表示字典转成字节之后的长度sk.send(b_dic)  # 具体的字典数据

with open(abs_path,mode = ‘rb‘) as f:    while filesize>0:        content = f.read(1024)        filesize -= len(content)        sk.send(content)sk.close()

# 先登录# 能上传到固定目录\下载(从指定文件夹下选择文件)

原文地址:https://www.cnblogs.com/shaohuagu/p/12261556.html

时间: 2024-11-04 22:50:37

python 基于tcp协议的文件传输3_解决粘包问题的相关文章

粘包产生的原因 socket 基于tcp实现远程执行命令(解决粘包)low

# 粘包产生的原因 # 粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的. # 基于tcp协议的套接字会有粘包现象,而基于udp协议的套接字不会产生粘包现象 # tcp是基于数据流的,于是收发的消息不能为空,这就需要在客户端和服务端都添加空消息的处理机制,防止程序卡住:而udp是基于数据报的,即使你输入的是空内容,那也不是空消息,udp协议会帮你封装上消息头(ip+端口的方式),这样就有了消息办界 # 两种情况下会发生粘包 # 1.发送端需要等缓冲区满才发送

socket大文件传输(解决粘包)

解决粘包 模块struct struct.pack(type,num) type:是num的类型 num :是一个数字 r = struct.pack 把一个数字打包成一个四字节的bytes struct.unpack(type,r) 功能:解包,把r解成原数字,结果是一个元组,原数字在元组的下标位0的位置 #解决粘包:原理是在服务器接收到字典长度后,根据字典长度去recv字典中的内容,就不会造成recv最后一次接收完后剩下的空间留给部分文件内容所造成字典内容和文件内容黏在一起 #实现文件的上传

用c++开发基于tcp协议的文件上传功能

用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学阅读,比 APUE 讲的更深入 这是某个银行广告项目(p2p传输视频)的一部分 IO模型采用的阻塞模式,文件一打开就直接上传 用vc 2003编译,生成win32 dll 麻雀虽小五脏俱全,CSimpleSocket,CReadStream dll 输出一虚类 extern "C" __d

Python网络编程04/recv原理/高大上版解决粘包方式

目录 Python网络编程04/recv原理/高大上版解决粘包方式 1.昨日内容回顾 2.recv工作原理 3.高大上版解决粘包方式(自定制报头) 3.1 解决思路: 3.2 服务端 3.3客户端 4.基于UDP协议的socket通信 4.1服务端 4.2客户端 Python网络编程04/recv原理/高大上版解决粘包方式 1.昨日内容回顾 1. 通信循环 2. 链接通信循环 3. 远程执行命令: subprocess.Popen() # bytes: 网络传输, 文件存储时. 4. 粘包现象

基于FTP协议的文件传输工具(SOCKET、FTP方面、MFC方面)

一.本课程是怎么样的一门课程(全面介绍) 1.简介:FTP(File Transfer Protocol),是文件传输协议的简称.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息.2.作用:FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算

基于tcp下的文件传输下载

1 //*****客户端****** 2 /*功能: (1) input>list 查看服务端目录内容 3 (2) input>get files 下载文件 4 (3) input>put file 上传文件*/ 5 6 #include <head.h> 7 8 #define UPLOAD_FILE 1 9 #define DOWNLOAD_FILE 2 10 #define FILE_YEXIST 3 11 #define FILE_NEXIST 4 12 #defin

基于Tcp通讯的文件传输小例子 (wpf)

源码下载 示例基于wpf技术 是networkcomms2.3.1自带的示例 通讯框架 英国的networkcomms2.3.1C#通信框架 using System; using System.Collections.Generic; using System.Linq; using System.Text; using NetworkCommsDotNet; using System.ComponentModel; using System.IO; namespace ExamplesWPF

Windows下基于TCP协议的大文件传输(流形式)

简单实现TCP下的大文件高效传输 在TCP下进行大文件传输,不像小文件那样直接打包个BUFFER发送出去,因为文件比较大可能是1G,2G或更大,第一效率问题,第二TCP粘包问题.针对服务端的设计来说就更需要严紧些.下面介绍简单地实现大文件在TCP的传输应用. 粘包出现原因:在流传输中出现,UDP不会出现粘包,因为它有消息边界(参考Windows 网络编程) 1 发送端需要等缓冲区满才发送出去,造成粘包 2 接收方不及时接收缓冲区的包,造成多个包接收 解决办法: 为了避免粘包现象,可采取以下几种措

Python网络编程02/基于TCP协议的socket简单的通信

目录 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 2.socket 2.1 socket套接字 2.2 基于TCP协议的socket简单通信 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 1.单播:单独联系某一个人 2.广播:给所有人发送消息(群发) 3.比特流:bit就是0101跟水流一样的源源不断的发送01010101 4.以太网协议:将数据进行分组:一组称之为一帧,数据报 head|data head:18字节: