您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python实现TCP文件接收发送

51自学网 2021-10-30 22:14:21
  python
这篇教程python实现TCP文件接收发送写得很实用,希望能帮到您。

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

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

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

还有记得改一下ip哟

1、发送

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

客户端

# 由客户端向服务器传数据,文件import socketimport tqdmimport osdef 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 socketimport tqdmimport osimport threadingdef 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()

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


生成Jupyter Lab快捷方式的小技巧
python利用socket实现udp文件传输功能
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。