python实现TCP文件接收发送

 更新时间:2021年09月02日 13:01:52   作者:_在水一方  
这篇文章主要为大家详细介绍了python实现TCP文件接收发送,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python爬取知乎图片代码实现解析

    Python爬取知乎图片代码实现解析

    这篇文章主要介绍了Python爬取知乎图片代码实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Pygame实战之检测按键正确的小游戏

    Pygame实战之检测按键正确的小游戏

    这篇文章主要为大家介绍了利用Pygame模块实现的检测按键正确的小游戏:每个字母有10秒的按键时间,如果按对,则随机产生新的字符,一共60s,如果时间到了,则游戏结束。快来跟随小编一起学习一下吧
    2021-12-12
  • Python之修改图片像素值的方法

    Python之修改图片像素值的方法

    今天小编就为大家分享一篇Python之修改图片像素值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 使Python代码流畅无缝连接的链式调用技巧

    使Python代码流畅无缝连接的链式调用技巧

    链式调用是一种编程风格,它允许将多个方法调用连接在一起,形成一个连贯的操作链,在Python中,链式调用常常用于使代码更简洁、易读,尤其在处理数据处理和函数式编程中应用广泛
    2024-01-01
  • Sklearn调优之网格搜索与随机搜索原理详细分析

    Sklearn调优之网格搜索与随机搜索原理详细分析

    这篇文章主要介绍了Sklearn调优之网格搜索与随机搜索原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • pytorch masked_fill报错的解决

    pytorch masked_fill报错的解决

    今天小编就为大家分享一篇pytorch masked_fill报错的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python urllib爬取百度云连接的实例代码

    python urllib爬取百度云连接的实例代码

    本篇文章主要介绍了python urllib爬取百度云连接的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Python中字符串格式化的方法小结

    Python中字符串格式化的方法小结

    在Python中,格式化字符串输出是一项非常常见的任务,Python提供了多种方式来实现字符串格式化,每种方式都有其独特的优势和用法,下面我们就来学习一下这些方法的具体操作吧
    2023-11-11
  • Python调用JavaScript代码的方法

    Python调用JavaScript代码的方法

    这篇文章主要介绍了Python调用JavaScript代码的方法,帮助大家在不同场景里,采用的最佳调用方式,提高程序的性能,感兴趣的朋友可以了解下
    2020-10-10
  • web.py在模板中输出美元符号的方法

    web.py在模板中输出美元符号的方法

    这篇文章主要介绍了web.py在模板中输出美元符号的方法,即在web.py的模板中输出$符号的方法,需要的朋友可以参考下
    2014-08-08

最新评论