1.while 1和while 0
while -4:
print(1)
while 5:
print(1)
while 1:
print(1)
while 0: #只有0是假,其它都是真
print(1)
2.电脑定时息屏
import time
from ctypes import *
def closewindows(closetime):
while closetime>0:
print(closetime)
time.sleep(1)
closetime-=1
user32 = windll.LoadLibrary('user32.dll')
user32.LockWorkStation()
if __name__ == "__main__":
closewindows(3)
4.struct的pack和unpack的使用
import struct
a=890000000
res=struct.pack('i',a) #bytes
print(res,len(res))
print(struct.unpack('i',res)) #得到一个元组
5.json序列化json.dumps()和json.loads()
import json
menu = {"1":"upload"} #字典不能传输
print(menu) #{'1': 'upload'}
print(type(menu)) # <class 'dict'>
print(len(menu)) #1
#json序列化为字符串 json.dumps()
res=json.dumps(menu)
print(res) #{"1": "upload"}
print(type(res)) #<class 'str'>
print(len(res)) #15
#json反序列化json.loads()
res1=json.loads(res)
print(res1) #{'1': 'upload'}
print(type(res1)) #<class 'dict'>
print(len(res1)) #1
6.利用cocket实现客户端和服务端大文件的传输
客户端代码:
import socket
import os
import json
import struct
sk = socket.socket()
sk.connect(("127.0.0.1",8001))
menu = {"1":"upload","2":"download"}
for k,v in menu.items():
print(k,v)
num = input("请输入功能选项:")
if num == "1":
dic = {"opt":menu.get(num),"filename":None,"filesize":None}
file_path = input("请输入一个绝对路径:")# 文件的绝对路径
# E:\Python S14\day32\实现大文件的传输\11.mp4
filename = os.path.basename(file_path)# 文件名字
filesize = os.path.getsize(file_path)# 获取用户输入的路径中文件的大小
dic["filename"] = filename
dic["filesize"] = filesize
str_dic = json.dumps(dic)
len_dic = len(str_dic)# 获取到字典的长度,是一个int类型的数据 46 146
b_len_dic = struct.pack('i',len_dic)# 用一个4bytes的数据表示字典的长度
sk.send(b_len_dic + str_dic.encode("utf-8"))# 将bytes类型的字典的长度 + bytes类型的字典的内容,一起发送给服务器
with open(file_path,"rb") as f:
while filesize:
content = f.read(1024)
sk.send(content)
filesize -= len(content)
sk.close()
服务端代码:
import socket
import json
import struct
sk = socket.socket()
sk.bind(("127.0.0.1",8001))
sk.listen()
conn,addr = sk.accept()
b_len_dic = conn.recv(4)
len_dic = struct.unpack('i',b_len_dic)[0]# 获取到int类型字典的长度,
# unpack得到的是一个元组,要取下标为0的位置
str_dic = conn.recv(len_dic).decode('utf-8') #得到字典
# str_dic = {"opt":menu.get(num),"filename":None,"filesize":None}
dic = json.loads(str_dic) #还原字典
if dic["opt"] == "upload":
filename = "new"+ dic["filename"]
with open(filename,"ab") as f:
while dic['filesize']:
content = conn.recv(1024)
f.write(content)
dic['filesize'] -= len(content)
elif dic["opt"] == "download":
# 客户端发来一个字典要执行的功能,以及客户端自己的绝对路径
# 服务器要返回这个绝对路径中所有文件及文件夹
# 客户端自己选择进入到哪一层目录下
# 服务器都要返回对应目录下所有文件及文件夹
# 客户随时选择某一个目录下的某一个文件进行下载
# 客户端发送来一个字典,包含了要进行的操作,要下载的文件的绝对路径,
# 根据绝对路径去读取文件内容
# 一边读,一遍发
pass
conn.close()
sk.close()
7.切换目录,输入一个绝对目录,如果输入..返回上一层目录并返回上层目录的文件,如果输入cd+目录,则转到相应目录,并输出所在目录下的文件。
客户端代码:
import socket
import os
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
abs_path = input('请输入您的根目录:')
sk.send(abs_path.encode('utf-8')) #发送用户输入根目录
current_dir = sk.recv(1024).decode('utf-8')
print(current_dir.split('--')) #获取到当前目录列表
while 1:
cmd = input('请输入>>>')
# cd + 文件夹 ..
if cmd == '..':
sk.send(cmd.encode('utf-8'))
current_dir = sk.recv(1024).decode('utf-8')
print(current_dir.split('--')) #拿到列表
if cmd == 'cd':
filename = input('请输入一个文件夹名:')
sk.send((cmd+' '+filename).encode('utf-8'))
current_dir = sk.recv(1024).decode('utf-8')
print(current_dir.split('--'))
sk.close()
服务端代码:
# 切换目录
import socket
import os
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
conn,addr = sk.accept()
def send_data(conn,path):
'''你给我一个目录,我把目录发给client'''
lis_dir = os.listdir(path) #以列表形式获取当前目录下的东西
str_dir = '--'.join(lis_dir) #拼接成字符串发送
conn.send(str_dir.encode('utf-8')) #发送给服务端
abs_path = conn.recv(1024).decode('utf-8')# 获取用户输入的绝对路径
current_dir = abs_path + '/'# 以下再处理,都要根据当前路径去处理,无论是返回上一层,还是进入下一层
send_data(conn,current_dir)# 把用户输入的路径下的所有文件及文件夹返回给客户端
# C:/Program Files (x86)/Common Files
while 1:
cmd = conn.recv(1024).decode('utf-8')
if cmd == '..':
current_dir = current_dir.split('/')[:-2] #拿到上个目录
current_dir = '/'.join(current_dir)+'/' #拿到字符串
# if 如果当前是C盘:
# 就返回给客户端告诉说没有上一层了!
send_data(conn, current_dir)
else:
filename = cmd.split(' ')[1]# 获取用户输入的文件名字
current_dir += filename + '/'# 将文件名字添加到当前路径下,组成一个完整的新路径
if os.path.isdir(current_dir):# 如果客户输入的文件名字是一个文件夹
send_data(conn, current_dir)
else:# 如果不是一个文件夹
conn.send(b'您输入的不是文件夹')
conn.close()
sk.close()
别跑,点个赞再走
网友评论