python socketserver ftp上传功能
一.socketserver用于多个客户端访问同一个服务端
客户端
import socket client = socket.socket() ip_port = ('127.0.0.1',8001) client.connect(ip_port) while 1:
msg = input('客户端说>>>') client.send(msg.encode('utf-8')) from_server_msg = client.recv(1024) print(from_server_msg.decode('utf-8'))
服务端
import socketserver class Myserver(socketserver.BaseRequestHandler): def handle(self):
while 1:
from_client_msg = self.request.recv(1024) print(from_client_msg.decode('utf-8'))
msg = input('服务端说:')
self.request.send(msg.encode('utf-8')) if __name__ == '__main__': ip_port = ('127.0.0.1',8001) server = socketserver.ThreadingTCPServer(ip_port,Myserver) server.serve_forever()
二.ftp上传
客户端
import os
import socket
import json
import struct client = socket.socket()
ip_port = ('127.0.0.1', 8001)
client.connect(ip_port) # 统计文件大小
file_size = os.path.getsize(r'D:\python_workspace_s18\day 29socketserver ftp功能简单讲解\aaa.mp4') # 统计文件描述信息,给服务端,服务端按照我的文件描述信息来保存文件,命名文件等等,现在放到一个字典里面了
file_info = {
'file_name': 'aaa.mp4',
'file_size':file_size
} # 由于字典无法直接转换成bytes类型的数据,所以需要json来讲字典转换为json字符串,在吧字符串转换为字节类型的数据进行发送 # json.dumps是将字典转换成json字符串的方法
file_info_json = json.dumps(file_info) # 将字符串转换成bytes类型的数据
file_info_byte = file_info_json.encode('utf-8') # 为了防止黏包现象,将文件描述信息的长度打包后和文件的描述信息的数据一起发送过去
data_len = len(file_info_byte)
data_len_struct = struct.pack('i',data_len) # 发送文件描述信息
client.send(data_len_struct + file_info_byte) # 定义一个变量 = 0 ,作为每次读取文件长度的累计值
sum = 0 with open('aaa.mp4','rb') as f:
while file_size > sum:
# 每次读取的文件内容,每次读取1024B大小的数据
erver_read_data = f.read(1024)
# 将sum累加,统计长度
sum += len(erver_read_data)
# 将每次读取的文件的真实数据发送给服务端
client.send(erver_read_data)
服务端
import json
import socket
import struct server = socket.socket() ip_port = ('127.0.0.1', 8001) server.bind(ip_port) server.listen() conn,addr = server.accept() # 首先接收文件的描述信息的长度
struct_data_len = conn.recv(4)
data_len = struct.unpack('i', struct_data_len)[0] # 打印长度
print('data_len',data_len) # 通过文件信息的长度将文件描述信息全部接收
file_info_bytes = conn.recv(data_len) # 将文件描述信息转换为字典类型,以便操作 file_info_json =file_info_bytes.decode('utf-8') # 将字符串转换成字典
file_info_dict = json.loads(file_info_json) # 打印字典
print(file_info_dict) # 统计每次接收的累积长度
recv_sum = 0 #根据文件描述信息,指定文件路径和文件名称
file_path = 'D:\python_workspace_s18\day 29socketserver ftp功能简单讲解\jj' + '\\' + file_info_dict['file_name'] #接收文件的真实数据
with open(file_path,'wb') as f:
# 循环接收,循环结束的依据是文件描述信息中文件的大小,也是通过一个初始值为0的变量来统计
while file_info_dict['file_size'] > recv_sum:
every_recv_data = conn.recv(1024)
recv_sum +=len(every_recv_data)
f.write(every_recv_data)
python socketserver ftp上传功能的更多相关文章
- 使用python操作FTP上传和下载
函数释义 Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,函数列举如下 ftp登陆连接 from ftplib import F ...
- python向ftp上传文件,解决中文问题
# coding: UTF-8 import os import sys import salt.client import salt.config import time from ftplib i ...
- python脚本 FTP上传学习
学习了这个博文http://www.cnblogs.com/cacique/archive/2012/08/24/2653686.html,楼主这个文章很适合初学者,所以根据楼主的内容推演了下上传文件 ...
- python之FTP上传和下载
# FTP操作 import ftplib host = '192.168.20.191' username = 'ftpuser' password = 'ftp123' file = '1.txt ...
- python的ftp上传和下载
# -*- coding: utf- -*- import os import ftplib USER_NAME = "" PASSWORD = "" SERV ...
- FTP上传文件,报错java.net.SocketException: Software caused connection abort: recv failed
FTP上传功能,使用之前写的代码,一直上传都没有问题,今天突然报这个错误: java.net.SocketException: Software caused connection abort: re ...
- 【Python学习 】Python实现的FTP上传和下载功能
一.背景 最近公司的一些自动化操作需要使用Python来实现FTP的上传和下载功能.因此参考网上的例子,撸了一段代码来实现了该功能,下面做个记录. 二.ftplib介绍 Python中默认安装的ftp ...
- python 网络编程粘包解决方案2 + ftp上传 + socketserver
一.struct 神奇的打包工具 struct 代码: import struct num = 156 #将int类型的数据打包成4个字节的数据 num_stru = struct.pack('i', ...
- 网络编程4 网络编程之FTP上传简单示例&socketserver介绍&验证合法性连接
今日大纲: 1.FTP上传简单示例(详细代码) 2.socketserver简单示例&源码介绍 3.验证合法性连接//[秘钥加密(urandom,sendall)(注意:中文的!不能用)] 内 ...
随机推荐
- spring boot 源码解析11-ConfigurationClassPostProcessor类加载解析
前言 ConfigurationClassPostProcessor实现了BeanDefinitionRegistryPostProcessor接口,该类会在AbstractApplicationCo ...
- MFC 双缓存绘图
在SDI应用程序中,当我们需要时刻动态刷新界面的时候,如果我们一直使用,UpdateAllView()那么就会出现屏幕不停闪烁.闪屏非常严重,特别是一直在动态刷新的时候.并且在闪屏的过程中 我们根本就 ...
- Size Balanced Tree(节点大小平衡树)
定义 SBT也是一种自平衡二叉查找树,它的平衡原理是每棵树的大小不小于其兄弟树的子树的大小 即size(x->l)$\ge$size(x->r->l),size(x->r-&g ...
- HNOI 2019 多边形
HNOI 2019 多边形 题意 小 R 与小 W 在玩游戏. 他们有一个边数为\(n\)的凸多边形,其顶点沿逆时针方向标号依次为\(1,2,3...n\).最开始凸多边形中有\(n\)条线段,即多边 ...
- Kotlin 委托(1)类委托、变量委托注意事项
1.官方文档 英文: https://kotlinlang.org/docs/reference/delegation.html https://kotlinlang.org/docs/referen ...
- [Array]628. Maximum Product of Three Numbers
Given an integer array, find three numbers whose product is maximum and output the maximum product. ...
- LUOGU P2939 [USACO09FEB]改造路Revamping Trails
题意翻译 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 ...
- animation-fill-mode 之 forwards , transition-timing-function的取值 和 transform属性
animation-fill-mode 有四个值可选,并且允许由逗号分隔多个值. none 不改变默认行为. forwards 当动画完成后,保持最后一个属性值(在最后一个关键帧中定义). backw ...
- centos安装消息队列beanstalkd
起因:开始想在windows安装beanstalkd,可以找了很多资料都没有成功.最终还是妥协.在虚拟机上装一个centos系统,然后在centos上安装beanstalkd供windows使用 yu ...
- git bash 常用操作文件命令行
1, cd : change directory的简写,改变目录的意思,就是切换到哪个目录下, 如 cd e:\fff 切换 E 盘下面的fff 目录. 当我们用cd 进入文件夹时,我们可以使用 通配 ...