zoukankan      html  css  js  c++  java
  • 网络编程上传内容

    客户端
    
    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()
  • 相关阅读:
    java栈的实现复习
    条件判断语句--linux
    转义符&脚本参数--linux
    linux备份脚本-模板
    github的搜索使用技巧
    sonarqube7.9安装部署(linux)
    openjdk与oraclejdk下载
    gitlab重写历史,清理历史大文件
    nexus私服搭建过程
    nexus私服关联本地maven配置
  • 原文地址:https://www.cnblogs.com/yangxinpython/p/11323422.html
Copyright © 2011-2022 走看看