一.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上传功能的更多相关文章

  1. 使用python操作FTP上传和下载

    函数释义 Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,函数列举如下 ftp登陆连接 from ftplib import F ...

  2. python向ftp上传文件,解决中文问题

    # coding: UTF-8 import os import sys import salt.client import salt.config import time from ftplib i ...

  3. python脚本 FTP上传学习

    学习了这个博文http://www.cnblogs.com/cacique/archive/2012/08/24/2653686.html,楼主这个文章很适合初学者,所以根据楼主的内容推演了下上传文件 ...

  4. python之FTP上传和下载

    # FTP操作 import ftplib host = '192.168.20.191' username = 'ftpuser' password = 'ftp123' file = '1.txt ...

  5. python的ftp上传和下载

    # -*- coding: utf- -*- import os import ftplib USER_NAME = "" PASSWORD = "" SERV ...

  6. FTP上传文件,报错java.net.SocketException: Software caused connection abort: recv failed

    FTP上传功能,使用之前写的代码,一直上传都没有问题,今天突然报这个错误: java.net.SocketException: Software caused connection abort: re ...

  7. 【Python学习 】Python实现的FTP上传和下载功能

    一.背景 最近公司的一些自动化操作需要使用Python来实现FTP的上传和下载功能.因此参考网上的例子,撸了一段代码来实现了该功能,下面做个记录. 二.ftplib介绍 Python中默认安装的ftp ...

  8. python 网络编程粘包解决方案2 + ftp上传 + socketserver

    一.struct 神奇的打包工具 struct 代码: import struct num = 156 #将int类型的数据打包成4个字节的数据 num_stru = struct.pack('i', ...

  9. 网络编程4 网络编程之FTP上传简单示例&socketserver介绍&验证合法性连接

    今日大纲: 1.FTP上传简单示例(详细代码) 2.socketserver简单示例&源码介绍 3.验证合法性连接//[秘钥加密(urandom,sendall)(注意:中文的!不能用)] 内 ...

随机推荐

  1. Scrapy下载器中间件实现随机请求头和代理ip

    一.设置随机请求头 class UAMiddleWare(object): UA_LIST = [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; ...

  2. int 13h,磁盘中断

    直接磁盘服务(Direct Disk Service——INT 13H)  00H —磁盘系统复位 01H —读取磁盘系统状态 02H —读扇区 03H —写扇区 04H —检验扇区 05H —格式化 ...

  3. tensorflow/model下的各个参数的理解

    首先,这个对应的proto就是 然后config里面的image_resizer等等 就是proto里面的image_resizer 等等,对应的参数可以在proto里面寻找解释和默认值以及类型 再比 ...

  4. Linux中单引号与双引号区别

    1. 单引号内的所有字符都保持它本身字符的意思,而不会被bash进行解释,echo -e时转义字符(\n,\t等)将被解释,如echo -e 'aa\naa'将是两行aa. 2.除了$.``(不是单引 ...

  5. Hadoop IO 特性详解(2)【文件校验】

    (本文引用了microheart,ggjucheng的一些资料,在此感谢.charles觉得知识无价,开源共享无价) 这一次我们接着分析文件IO校验的相关代码,看看最底层是如何实现这种大数据集的文件校 ...

  6. Leetcode405Convert a Number to Hexadecimal数字转换为十六进制数

    给定一个整数,编写一个算法将这个数转换为十六进制数.对于负整数,我们通常使用 补码运算 方法. 注意: 十六进制中所有字母(a-f)都必须是小写. 十六进制字符串中不能包含多余的前导零.如果要转化的数 ...

  7. 微信网页授权demo2

    1.在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名.请注意,这里填写的是 ...

  8. laravel-admin 自定义导出excel功能,并导出图片

    https://www.jianshu.com/p/91975f66427d 最近用laravel-admin在做一个小项目,其中用到了excel导出功能. 但是laravel-admin自带的导出功 ...

  9. java并发系列(三)-----ReentrantLock(重入锁)功能详解和应用演示

    1. ReentrantLock简介 jdk中独占锁的实现除了使用关键字synchronized外,还可以使用ReentrantLock.虽然在性能上ReentrantLock和synchronize ...

  10. linux基础指令参数

    eth0,eth1,eth2--代表网卡一,网卡二,网卡三-- lo代表127.0.0.1,即localhost 参考: Linux命令:ifconfig 功能说明:显示或设置网络设备 语 法:ifc ...