一.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() #客户端
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

#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')

#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')

# 打印进度条

import time
for i in range(10):
str_p = i * '*'
print('\r'+ str_p,end='')
time.sleep(0.5)

29 Socketserver和 ftp的更多相关文章

  1. socketserver实现FTP

    功能: 1.用户加密认证 2.允许同时多用户登录 3.每个用户有自己的家目录 ,且只能访问自己的家目录 4.对用户进行磁盘配额,每个用户的可用空间不同 5.允许用户在ftp server上随意切换目录 ...

  2. day 29 socketserver ftp功能的简单讲解

    1.上传下载的简单示例 server: import socket import struct import json   server =socket.socket() server.bind((' ...

  3. 第二十九天- socketserver模块 ftp上传

    1.socketserver模块: socketserver,它提供了服务器中心类,可简化网络服务器的开发,内部使用IO多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的socket ...

  4. python网络编程--socketserver 和 ftp功能简单说明

    1. socketserver 我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用socketserver可以实现和多个客户端通信.它是在socket的基础上进行了一层封装,也 ...

  5. python socketserver 实现 ftp功能

    需求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp server上随意切换目录 允许用户查看当前目 ...

  6. python学习道路(day9note)(socketserver编程,ftp)

    1.ftp client #!/usr/bin/env python #_*_coding:utf-8_*_ import socket import subprocess user_data = { ...

  7. socketserver + ftp

    --------------------------------------------生活不止眼前的苟且,还有诗和远方的田野. day 29 socketserver + ftp # # ----- ...

  8. Python开发程序:FTP程序

    作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp se ...

  9. (转)Python开发程序:支持多用户在线的FTP程序

    原文链接:http://www.itnose.net/detail/6642756.html 作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ...

随机推荐

  1. 【手把手教你树莓派3 (二)】 启动wifi模块

    概述 树莓派3内置了wifi和蓝牙模块,我们不用像以前的版本那样,再去购买一个外接的模块练到raspberry上. 当我们第一次启动了树莓派的时候,必然使用了网线,但是之后的每一次使用,我们当然更希望 ...

  2. 如何用tomcat发布自己的Java项目

    如何用tomcat发布自己的Java项目 tomcat是什么?它是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器.我们用Java开发出来的web项目,通过tomcat发布出来,别人就可 ...

  3. log4j 根据类名指定文件

    log4j.logger.io.netty=INFO, stdout, spiderlog4j.logger.com.ld.net.spider=INFO, stdout, spider log4j. ...

  4. max3232

    max3232采用专有低压差发送器输出级,利用双电荷泵在3.0V至5.5V电源供电时能够实现真正的RS-232性能,器件仅需四个0.1uF的外部小尺寸电荷泵电容.max3232确保在120kbps数据 ...

  5. 洛谷月赛 Hello World(升级版) - 动态规划

    题目背景 T1答案要mod1000000007(10^9+7),请重新提交,非常抱歉! 一天,智障的pipapi正在看某辣鸡讲义学程序设计. 题目描述 在讲义的某一面,他看见了一篇文章.这篇文章由英文 ...

  6. java使用itex读取pdf,并搜索关键字,为其盖章

    导读:近期要做一个根据关键字定位pdf的盖章位置的相关需求,其中关键字可配置多个(包含pdf文档中可能不存在的关键字),当页面显示盖章完成时,打开pdf显示已经损坏. 排查后发现,当itext搜索的关 ...

  7. Python3基础 try-指定except-as reason 捕获打开一个不存在的文件的时候,会产生OSError异常的示例

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  8. 从bios启动说起

    如果从bios启动说起的话,BIOS去加载bootloader,bootloader去加载操作系统,那么bootloader是怎么找到操作系统的呢?经过一些流程后,它会去找grub:然后通过grub提 ...

  9. java数字格式化

    [转载] Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子.下面是一个例子: importjava.text.DecimalFormat; publiccla ...

  10. hibernate与mybatis的区别和应用场景

    mybatis 与 hibernate 的区别和应用场景(转) 1    Hibernate : 标准的ORM(对象关系映射) 框架: 不要用写sql, sql 自动语句生成: 使用Hibernate ...