一.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. Ajax的简单基础

    什么是 AJAX ? AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新. 这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行 ...

  2. 在线模拟http-post请求

    今天,要测试一个post请求的API,找了下,下面的网站可以直接利用起来,mark下 http://www.atool.org/httptest.php

  3. 2019-8-8-WPF-非客户区的触摸和鼠标点击响应

    title author date CreateTime categories WPF 非客户区的触摸和鼠标点击响应 lindexi 2019-08-08 16:48:31 +0800 2019-07 ...

  4. TZOJ 4024 游戏人生之梦幻西游(连续子段和绝对值最小)

    塔神酷爱玩梦幻西游这款游戏,这款游戏以著名的章回小说<西游记>故事为背景,透过Q版的人物,营造出浪漫的网络游戏风格.塔神以追求天下无敌为目标,从一个默默无闻的菜鸟,打拼到了登峰造极的大师, ...

  5. 如何处理HTML5新标签的浏览器兼容问题?

    方法一 : 1.使用静态资源的html5shiv包 <!--[if lt IE9]> <script src="http://cdn.static.runoob.com/l ...

  6. 唱吧基于 MaxCompute 的大数据之路

    使用 MaxCompute之前,唱吧使用自建体系来存储处理各端收集来的日志数据,包括请求访问记录.埋点数据.服务器业务数据等.初期这套基于开源组件的体系有力支撑了数据统计.业务报表.风控等业务需求.但 ...

  7. 图像通道、Scalar、分离、合成通道

    http://lib.csdn.net/article/opencv/33264 http://blog.csdn.net/laohu_tiger/article/details/17359777 h ...

  8. ECMAScript 6 (浅显入门)

    1.let:ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为unde ...

  9. PhpExcel参考网址

    参考网址: http://www.cnblogs.com/yuwensong/p/3771787.html

  10. 学习Python笔记---操作列表

    1.for循环: 编写for循环时,对于用语存储列表中每个值的临时变量,可指定任何名称. 在for循环中,想包含多少行代码都可以,每个缩进的代码行都是循环的一部分,且将针对列表中的每个值都执行一次. ...