网络编程
位置:首页>> 网络编程>> Python编程>> python实现TCP文件接收发送

python实现TCP文件接收发送

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

标签:python,文件接收,发送

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

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com