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)(注意:中文的!不能用)] 内 ...
随机推荐
- oracle数据库忘记sys密码如何改密码
ORACLE服务器操作: 1.win+R打开dos窗口cmd 2.输入 sqlplus/nolog出现 3.输入 conn / as sysdba 出现 4. alter user sys ident ...
- 2019.10.29 csp-s模拟测试93 反思总结
T1: 求出前缀和,三维偏序O(nlog2n)CDQ 二维其实就可以 #include<iostream> #include<cstdio> #include<cstri ...
- reduce个数问题
reduce的数目到底和哪些因素有关 1.我们知道map的数量和文件数.文件大小.块大小.以及split大小有关,而reduce的数量跟哪些因素有关呢? 设置mapred.tasktracker.r ...
- 架构hive2mysql流程
1.分析参数 args = new String[5]; args[0]="d:/3-20.sql"; args[1]="-date"; args[2]=&qu ...
- Power Strings POJ2406 KMP 求最小循环节
相比一般KMP,构建next数组需要多循环一次,因为next[j]代表前j-1个字符的最长相同前缀后缀,比如字符串为aab aab aab共9个字符,则next[10]等于前9个字符中最长相同前缀后缀 ...
- H5C3--仿京东首页(包含轮播图,倒计时)
!!!很抱歉,之前的域名已经过期了,已经被别人购买了拿去做菠菜了,现在的话,京东页面我重新发布一下代码 #请看注意事项,因为有模拟请求,请在本地服务器或者IDEA类编译器打开(2019年10月10日0 ...
- [转]深入理解客户区尺寸client
关于元素尺寸,一般地,有偏移大小offset.客户区大小client和滚动大小scroll.前文已经介绍过偏移属性,后文将介绍scroll滚动大小,本文主要介绍客户区大小client 客户区大小 客户 ...
- HTML 语法简要总结
HTML基本语法 认识网页 网页主要由文字.图像和超链接等元素构成.当然,除了这些元素,网页中还可以包含音频.视频以及Flash等. 常见浏览器内核介绍 浏览器是网页运行的平台,常用的浏览器有IE.火 ...
- Eclipse安装FindBugs
Eclipse安装FindBugs 1.使用Eclipse的help在线安装,安装地址” FindBugs - http://findbugs.cs.umd.edu/eclipse-daily“. 2 ...
- Xshell 、PuTTY 复制文件到Linux
一.使用Xshell 在linux下下载一个需要安装一个工具lrzsz包: [root@localhost home] # yum install -y lrzsz 从windows上传文件到linu ...