当前位置 博文首页 > python实现TCP文件接收发送

    python实现TCP文件接收发送

    作者:_在水一方 时间:2021-09-15 18:14

    本文实例为大家分享了python实现TCP文件接收发送的具体代码,供大家参考,具体内容如下

    下一篇分享:udp收发的实现

    先运行服务器端打开接收,在运行客服端发送文件

    还有记得改一下ip哟

    1、发送

    根据自己需求修改,简单局域网下完成文件收发

    客户端

    # 由客户端向服务器传数据,文件
    
    import socket
    import tqdm
    import os
    
    
    def send(filename):
        # 传输数据间隔符
        SEPARATOR = '<SEPARATOR>'
        # 服务器信息
        host = '127.0.0.1'
        port =1234
        # 文件缓冲区
        Buffersize = 4096*10
        # 传输文件名字
        filename = filename
        # 文件大小
        file_size  = os.path.getsize(filename)
        # 创建socket链接
        s = socket.socket()
        print(f'服务器连接中{host}:{port}')
        s.connect((host, port))
        print('与服务器连接成功')
    
        # 发送文件名字和文件大小,必须进行编码处理
        s.send(f'{filename}{SEPARATOR}{file_size}'.encode())
    
        # 文件传输
        progress = tqdm.tqdm(range(file_size), f'发送{filename}', unit='B', unit_divisor=1024)
    
        with open(filename,'rb') as f :
            # 读取文件
            for _ in progress:
                bytes_read = f.read(Buffersize)
                if not bytes_read:
                    break
                # sendall 确保网络忙碌的时候,数据仍然可以传输
                s.sendall(bytes_read)
                progress.update(len(bytes_read))
        # 关闭资源
        s.close()
    
    if __name__ == '__main__':
        filename = input('请输入文件名:')
        send(filename)

    2、接收

    服务器端

    import socket
    import tqdm
    import os
    import threading
    
    def received():
        # 设置服务器的ip和 port
        # 服务器信息
        sever_host = '127.0.0.1'
        sever_port =1234
        # 传输数据间隔符
        SEPARATOR = '<SEPARATOR>'
    
        # 文件缓冲区
        Buffersize = 4096*10
        s = socket.socket()
        s.bind((sever_host, sever_port))
    
        # 设置监听数
        s.listen(128)
        print(f'服务器监听{sever_host}:{sever_port}')
    
        # 接收客户端连接
        client_socket, address = s.accept()
        # 打印客户端ip
        print(f'客户端{address}连接')
    
        # 接收客户端信息
        received = client_socket.recv(Buffersize).decode()
        filename ,file_size = received.split(SEPARATOR)
        # 获取文件的名字,大小
        filename = os.path.basename(filename)
        file_size = int(file_size)
    
        # 文件接收处理
        progress = tqdm.tqdm(range(file_size), f'接收{filename}', unit='B', unit_divisor=1024, unit_scale=True)
    
    
        with open('8_18_'+filename,'wb') as f:
            for _ in progress:
    
                # 从客户端读取数据
                bytes_read = client_socket.recv(Buffersize)
                # 如果没有数据传输内容
                if not bytes_read:
                    break
                # 读取写入
                f.write(bytes_read)
                # 更新进度条
                progress.update(len(bytes_read))
    
        # 关闭资源
        client_socket.close()
        s.close()
    
    if __name__ == '__main__':
        received()
    jsjbwy
    下一篇:没有了