• 文件上传.py


    #服务端
    from socket import *
    from multiprocessing import Process
    import os
    def main():
        # 服务端文件根目录
        ROOT = os.path.dirname(os.path.abspath(__file__))
        s = socket(AF_INET,SOCK_STREAM)
        #绑定ip和端口
        s.bind(('172.16.11.100',9999))
        #监听客户端的连接请求
        s.listen(10)
        #连接循环
        while True:
            print('waiting...')
            connect,address = s.accept()
            p = Process(target=talk,args=(connect,ROOT))
            p.start()
            p.join()
    
        s.close()
    
    def talk(connect,ROOT):
        #通信循环
        while True:
            #接收文件名和文件大小
            data1 = connect.recv(1024)
            str1 = data1.decode('utf-8')
            filename,filesize = str1.split('|')
            fullname = os.path.join(ROOT,filename)
            with open(fullname,'ab') as f:
                has_recv = 0
                while has_recv != int(filesize):
                    # 接收文件数据
                    data2 = connect.recv(1024)
                    f.write(data2)
                    has_recv += len(data2)
                    print(has_recv)
                else:
                    connect.send('上传成功'.encode('utf-8'))
    
    if __name__ == '__main__':
        main()
    
    
    
    
    from socket import *
    import os
    c = socket(AF_INET,SOCK_STREAM)
    #连接到服务器
    c.connect(('172.16.11.100',9999))
    #客户端文件所在目录
    ROOT = os.path.dirname(os.path.abspath(__file__))
    
    while True:
        #提示用户输入要上传的文件名
        name = input('>>>').strip()
        # 文件完整路径
        fullname = os.path.join(ROOT, name)
        #判断文件是否存在
        if os.path.exists(fullname):
            # 文件大小
            file_size = os.path.getsize(fullname)
    
            # 将文件发送给服务器
            file_info = '%s|%d' % (name, file_size)
    
            c.send(file_info.encode('utf-8'))
            #打开
            with open(fullname,'rb') as f:
                #假设已经发送的字节数
                has_sent = 0
                while has_sent != file_size:
                    #读取
                    data = f.read(1024)
                    #发送
                    c.sendall(data)
                    #递增
                    has_sent += len(data)
                    # 接收服务器响应信息
                    print(has_sent)
            #接收服务上传成功消息
            data2 = c.recv(1024)
            print(data2.decode('utf-8'))
        else:
            print('文件不存在')
    
    
    c.close()

    仅供参考!

  • 相关阅读:
    java自学
    java自学
    java自学
    java自学
    java自学
    java自学
    java自学
    自学Java0730
    自学Java0729
    自学Java0728
  • 原文地址:https://www.cnblogs.com/wshr210/p/10911148.html
Copyright © 2020-2023  润新知