socketserver + ftp
--------------------------------------------生活不止眼前的苟且,还有诗和远方的田野.
day 29 socketserver + ftp
# # ------------------------------------------------------------------------------------------------------------#.
# # --------------[socketserver示例客户端]--------------
import socket
import time
client = socket.socket()
client.connect(('127.0.0.1',8001)) while 1:
client_data = input('别开车>>>')
client.send(client_data.encode('utf-8')) from_server_msg = client.recv(1024)
print(from_server_msg.decode('utf-8')) client.close()
# # --------------[socketserver示例服务端]--------------
import socketserver
class KnightServer(socketserver.BaseRequestHandler):
def handle(self):
# self.request 相当于conn链接通道
while 1:
from_client_msg = self.request.recv(1024)
print(from_client_msg.decode('utf-8'))
server_msg = input('服务端说>>>')
self.request.send(server_msg.encode('utf-8'))
if __name__ == '__main__':
ip_port = ('127.0.0.1',8001)
server = socketserver.ThreadingTCPServer(ip_port,KnightServer)
server.serve_forever()
# # --------------[ftp上传实例客户端]--------------
import socket
import json
import os
import struct
client = socket.socket() client.connect(('127.0.0.1',8001))
file_size = os.path.getsize(r'D:\python_workspace\day029\xxx.mp4')
#定义了一个文件描述信息,以字典的形式
file_info_dict = {
'file_path': r'D:\python_workspace\day029\xxx.mp4',
'file_name': 'xxx.mp4',
'file_size':file_size
} def login(): print('欢迎来到登录页面')
username = input('请输入用户名>')
password = input('请输入密码>')
#将用户名和密码拼接成一个字符串
user_info = username + '|' + password
client.send(user_info.encode('utf-8')) #如果服务端的状态码为200,登录成功,如果不是,登录失败,登录成功,这个信息就是服务端的功能信息
from_server_status = client.recv(1024).decode('utf-8')
if from_server_status == '201':
print('登录失败')
else:
all_file_size = 0
#接收的是一个json格式的字符串
server_func_list = json.loads(from_server_status)
#打印了功能信息
print(server_func_list) #{'1': '上传', '2': '下载'}
client_func_choice = input('请输入要选择的功能序号>>>')
#选择1,说明要上传
if client_func_choice == '1':
# 上传或者下载的功能序号添加到了文件描述信息的字典中
file_info_dict['func_choice'] = client_func_choice
file_dict_json = json.dumps(file_info_dict,ensure_ascii=False)
#发送文件描述信息
client.send(file_dict_json.encode('utf-8'))
#
with open(file_info_dict['file_path'],'rb') as f:
while all_file_size < file_info_dict['file_size']:
every_read_data = f.read(1024)
client.send(every_read_data)
every_read_datalen = len(every_read_data) all_file_size += every_read_datalen def register():
print('注册') print('-----请登录------')
print('1:登录\n2:注册') #选择登录
function_choice = input('请输入你要选择的功能序号>>>>')
#通过选择的序号,找到对应的函数执行,一个字典搞定
function_dict = {'1':login,'2':register} function_dict[function_choice]()
# # --------------[ftp上传实例服务端]--------------
import socket
import time
import json
server = socket.socket() server.bind(('127.0.0.1',8001))
server.listen() conn,addr = server.accept() def upload(conn,client_file_info):
#
upload_file_path = r'D:\jj' + '\\' + client_file_info['file_name']
recv_all_datalen = 0
with open(upload_file_path,'wb') as f:
while recv_all_datalen < client_file_info['file_size']:
every_recv_data = conn.recv(1024)
every_recv_datalen = len(every_recv_data)
recv_all_datalen += every_recv_datalen
f.write(every_recv_data) print('客户端上传文件') client_userinfo = conn.recv(1024).decode('utf-8')
#定义一个需要返回给服务端的功能列表
server_function_list = {'1':'上传','2':'下载'}
#将功能字典转换为json字符串,然后进行编码,转成bytes类型
json_func_list = json.dumps(server_function_list,ensure_ascii=False) #服务端登录认证
with open('userinformation','r',encoding='utf-8') as f:
for i in f:
if i.strip() == client_userinfo:
#登录成功以后,将服务端能够提供的功能,发送给客户端
conn.send(json_func_list.encode('utf-8'))
#接收客户端的文件描述信息,其中有一项是功能序号
client_fileinfo_json = conn.recv(1024).decode('utf-8')
client_file_info = json.loads(client_fileinfo_json) print(client_file_info)
if client_file_info['func_choice'] == '1':
upload(conn,client_file_info) break
else:
#登录错误的信息码
conn.send(b'201')
socketserver + ftp的更多相关文章
- Python socketserver ftp功能简单讲解
socketserver模块实现并发 为什么要讲socketserver?我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用socketserver可以实现和多个客户端通信.它 ...
- python socketserver ftp上传功能
一.socketserver用于多个客户端访问同一个服务端 客户端 import socket client = socket.socket() ip_port = ('127.0.0.1',8001 ...
- python之socketserver ftp功能简单讲解
TCP协议中的socket一次只能和一个客户端通信,然而socketserver可以实现和多个客户端通信. 它是在socket的基础上进行了一层封装,底层还是调用的socket # 服务端 impor ...
- day 29 socketserver ftp功能的简单讲解
1.上传下载的简单示例 server: import socket import struct import json server =socket.socket() server.bind((' ...
- 29 Socketserver和 ftp
一.Socketserver #服务端 import socketserver class KnightServer(socketserver.BaseRequestHandler): def han ...
- Day30--Python--struct, socketserver
1. struct struct.pack 打包 def pack(fmt, *args): # known case of _struct.pack """ pack( ...
- Python全栈--目录导航
这里更新以Python语言作为基础,想要成为全栈工程师需要掌握的技能... Python基础语法 day01 初识Python day02 while循环 运算符和编码 day03 字符串 day04 ...
- 开发socketserver 以及定制开发自己的FTP服务器
socket server 示例 #服务端程序 import socketserver class TcpHandler(socketserver.BaseRequestHandler): def h ...
- socketserver模块写的一个简单ftp程序
一坨需求... 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp server上随意切换目录 (cd) ...
随机推荐
- [转] Scala Try 与错误处理
一.概述 当你在尝试一门新的语言时,可能不会过于关注程序出错的问题, 但当真的去创造可用的代码时,就不能再忽视代码中的可能产生的错误和异常了. 鉴于各种各样的原因,人们往往低估了语言对错误处理支持程度 ...
- JSON语法与JavaScript语法的区别
JSON是独立于语言存在的,在不同的编程语言中对这种数据类型的实现不同,例如在JavaScript中使用JavaScript对象对这种数据格式进行实现,那么在java中当然是用java对象实现. 描述 ...
- Hive内部表与外部表的区别
1.未被external修饰的是内部表[managed table],被external修饰的为外部表[external table]. 2.内部表数据由Hive自身管理,外部表数据由HDFS管理. ...
- [20180926]共享池中的NETWORK BUFFER.txt
[20180926]共享池中的NETWORK BUFFER.txt --//最近几天一直在探究SQL*Net more data from client 相关等待事件,发现SDU相关,自己也网上探究一 ...
- iOS开发创建UI的耗时操作处理
项目中有网络请求.读写操作等一系列耗时操作时,为了避免阻塞主线程,我们会把这些耗时操作放到子线程中去处理,当处理完成后,再回到主线程更新UI,这样就不会阻塞主线程.但是创建UI的时候一般都是在主线程中 ...
- centos7 下安装Apache2+MariaDB+PHP5过程详解
1.启用Apache2 Centos7默认已经安装httpd服务,只是没有启动.如果你需要全新安装,可以 yum install -y httpd 启动服务:systemctl start httpd ...
- GitHub-版本管理
参考博文:廖雪峰Git教程 1. 管理修改 现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问, ...
- 异常--finally关键字
finally定义: finally{}代码块中的代码是一定会执行的,一般用来关闭资源或者一些必须执行的代码,如数据库连接的关闭
- FCM算法的matlab程序(初步)
FCM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648430.html文章中已经介绍了FCM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...
- Vue编写的todolist小例子
Vue编写的todolist小例子 本篇博客主要包含一个内容: 1.第一个内容:使用Vue编写todolist例子,包含的主要知识是v-model,v-for,el表达式,以及Vue中使用method ...