网络编程上传内容

客户端

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()
相关文章
相关标签/搜索