客户端
import socket
import os
import json
import struct
client =socket.socket()
client.connect(("127.0.0.1",12000))
"""
获取文件路径
获取这个文件路径下的文件
for循环打印再加上枚举打印这个文件下的内容
用户选择上传内容
判断输入是否时数字
然后把输入的序号转为int类型
判断这个数字是否大于文件内容
取出用户选择的内容然后拼接路径
取出用户选择文件的内容
创建一个字典,取名字放入取出的内容
序列化字典将字典变成一个字符串后边在转成二进制
创建一个一个字典的报头
发送字典的报头
发送序列话过后的字典
打开文件for 循环文件据柄
在发送循环过后的字符
"""
while True:
HUOQU = r"D:\老男孩\学习资料\视频\day30\视频"
PATH =os.listdir(HUOQU)
for i ,j in enumerate(PATH,1):
print(i,j)
choice = input("请输入编号>>>:")
if choice.isdigit():
choice=int(choice)-1
if choice in range(0,len(PATH)):
wenjian =os.path.join(HUOQU,PATH[choice])
neirong = os.path.getsize(wenjian)
d ={"name":"欧美精选",
"file_size":neirong}
byths = json.dumps(d).encode("utf-8")
suoxiaoshuju = struct.pack("i",len(byths))
client.send(suoxiaoshuju)
client.send(byths)
with open (wenjian,"rb") as f:
for i in f:
client.send(i)
else:
print("不在范围")
else:
print("不是数字")
服务端
import socket
import json
import struct
server = socket.socket()
server.bind(("127.0.0.1",12000))
server.listen(5)
"""获取文件报头
将文件报头解开
获取文件
将文件反序列化,将字符串编程字典
取出字典的内的数据
创建初始文件长度
读出字典文件的数据
判断文件内的内的数据是否大于字典内的数据
每次取出字节1024
f.取出
文件长度+每次取出的字节"""
while True:
conn,msg = server.accept()
while True:
try:
res = conn.recv(4)
res1 = struct.unpack("i",res)[0]
res2 = conn.recv(res1)
res3 =json.loads(res2.decode("utf-8"))
res4 = res3.get("file_size")
dic_size = 0
with open(res3.get("name"),"wb") as f:
while dic_size<res4:
data = conn.recv(1024)
f.write(data)
dic_size+=len(data)
print("sahngchuan")
except ConnectionError as e:
break
conn.close()