python实现TCP文件接收发送

作者:_在水一方 时间:2021-08-25 00:56:46 

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

来源:https://blog.csdn.net/JSSQSC/article/details/120040566

标签:python,文件接收,发送
0
投稿

猜你喜欢

  • python实现可变变量名方法详解

    2021-04-23 11:42:49
  • GO语言的IO方法实例小结

    2023-09-17 08:47:24
  • python各类经纬度转换的实例代码

    2023-12-24 12:19:58
  • go mod 使用私有gitlab群组的解决方案

    2024-05-22 10:29:28
  • asp 得到动态数组中元素的个数

    2011-03-30 10:55:00
  • python中kmeans聚类实现代码

    2023-09-27 19:49:44
  • SQL Server 2005 五个动态管理对象

    2008-12-18 14:50:00
  • php基础教程 php内置函数实例教程

    2023-11-14 18:28:45
  • pycharm如何为函数插入文档注释

    2023-09-13 09:53:56
  • asp如何对文件进行操作?

    2009-11-20 18:31:00
  • python argparse模块传参用法实例

    2022-01-19 09:53:42
  • Vue+ECharts实现中国地图的绘制及各省份自动轮播高亮显示

    2024-04-27 16:12:40
  • Python免费验证码识别之ddddocr识别OCR自动库实现

    2023-02-25 12:28:31
  • Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)

    2021-07-10 10:35:25
  • 微信小程序自定义导航教程(兼容各种手机)

    2024-04-30 09:53:12
  • Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定

    2023-07-02 16:28:13
  • 基于SQLAlchemy实现操作MySQL并执行原生sql语句

    2024-01-18 17:16:05
  • 在pycharm中文件取消用 pytest模式打开的操作

    2022-06-20 18:16:19
  • Python读取Excel数据实现批量生成PPT

    2021-03-05 23:57:35
  • C#连接Oracle数据库的实例方法

    2024-01-20 14:37:05
  • asp之家 网络编程 m.aspxhome.com