基于TCP协议传输文件
'''
版本一:
此版本一次写入整个文件大小,
只能传输小文件,大文件可能会传不全
'''
import socket
import json
sk = socket.socket()
sk.bind(('127.0.0.1',9001))
sk.listen()
con,addr = sk.accept()
msg = con.recv(1024).decode('utf-8')
dic = json.loads(msg)
with open(dic['filename'],mode='wb') as f :
content = con.recv(dic['filesize'])
print('--->',len(content))
f.write(content)
con.close()
sk.close()
import os
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',9001))
abs_path = r'D:\Wang.YH\Videos\人民至上.mp4'
filename = os.path.basename(abs_path)
filesize = os.path.getsize(abs_path)
dic = {'filename':filename,
'filesize':filesize}
str_dic = json.dumps(dic)
sk.send(str_dic.encode('utf-8'))
with open(abs_path,mode='rb') as f:
content = f.read()
sk.send(content)
sk.close()
'''
版本二:
分次传输文件
不足:可能会产生粘包现象
'''
import socket
import json
sk = socket.socket()
sk.bind(('127.0.0.1',9001))
sk.listen()
con,addr = sk.accept()
msg = con.recv(1024).decode('utf-8')
dic = json.loads(msg)
with open(dic['filename'],mode='wb') as f:
while dic['filesize'] >0:
content = con.recv(1024)
dic['filesize'] -=len(content)
f.write(content)
con.close()
sk.close()
import os
import socket
import json
sk = socket.socket()
sk.connect(('127.0.0.1',9001))
abs_path = r'D:\Wang.YH\Videos\人民至上.mp4'
filename = os.path.basename(abs_path)
filesize = os.path.getsize(abs_path)
dic = {'filename':filename,
'filesize':filesize}
str_dic = json.dumps(dic)
sk.send(str_dic.encode('utf-8'))
with open(abs_path,mode='rb') as f:
while filesize >0:
content = f.read(1024)
filesize -= len(content)
sk.send(content)
sk.close()
'''
版本三:
解决粘包
'''
import socket
import json
import struct
sk = socket.socket()
sk.bind(('127.0.0.1',9001))
sk.listen()
con,addr = sk.accept()
msg_len = con.recv(4)
dic_len = struct.unpack('i',msg_len)[0]
msg = con.recv(dic_len).decode('utf-8')
dic = json.loads(msg)
with open(dic['filename'],mode='wb') as f:
while dic['filesize'] >0:
content = con.recv(1024)
dic['filesize'] -=len(content)
f.write(content)
con.close()
sk.close()
import os
import socket
import json
import struct
sk = socket.socket()
sk.connect(('127.0.0.1',9001))
abs_path = r'D:\Wang.YH\Videos\人民至上.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)
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()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人