Python网络编程之使用TCP方式传输文件操作示例
作者:HMMHMH 发布时间:2023-04-17 13:21:18
标签:Python,TCP,传输文件
本文实例讲述了Python网络编程之使用TCP方式传输文件操作。分享给大家供大家参考,具体如下:
TCP文件下载器
客户端
需求:输入要下载的文件名,从服务器端将文件拷贝到本地
步骤:
1.创建TCP套接字,绑定端口
2.连接服务端
3.输入要下载的文件名
4.将文件名编码,并发送到服务端
5.接收服务端返回的数据
6.关闭套接字
代码
# 导入模块
import socket
# 创建套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口
tcp_client_socket.bind(("", 8080))
# 连接IP地址和端口
tcp_client_socket.connect(("192.168.43.216", 8080))
file_name = input("请输入要下载的文件:\n")
# 文件名编码
tcp_client_socket.send(file_name.encode())
try:
# 文件传输
with open("C:/Users/Administrator/Desktop/" + file_name, "wb") as file:
while True:
# 接收数据
file_data = tcp_client_socket.recv(1024)
# 数据长度不为0写入文件
if file_data:
file.write(file_data)
# 数据长度为0表示下载完成
else:
break
# 下载出现异常时捕获异常
except Exception as e:
print("下载异常", e)
# 无异常则下载成功
else:
print(file_name, "下载成功")
# 关闭客户端
tcp_client_socket.close()
服务端
需求:接收客户端发送的文件名,将文件传输给客户端
步骤:
1.创建TCP套接字,绑定端口
2.设置监听
3.接收客户端传输的文件名信息并解码
4.将文件发送到客户端
5.关闭客户端套接字(断开连接)
代码
# 导入模块
import socket
# 创建tcp服务端socket
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口
tcp_server_socket.bind(("", 8080))
# 设置监听,把服务端socket由主动套接字改成被动套接字,只能接收客户端的连接请求
tcp_server_socket.listen(128)
while True:
# 接收客户端信息
client_socket, client_ip = tcp_server_socket.accept()
print("客户端:", client_ip, "连接")
# 接收下载信息
file_name_data = client_socket.recv(1024)
# 解码下载信息
file_name = file_name_data.decode()
try:
# 数据传输
with open("/home/python/Desktop/" + file_name, "rb") as file:
while True:
# 读取文件数据
file_data = file.read(1024)
# 数据长度不为0表示还有数据没有写入
if file_data:
client_socket.send(file_data)
# 数据为0表示传输完成
else:
print(file_name, "传输成功")
break
except Exception as e:
print("传输异常:", e)
# 关闭客户端连接
client_socket.close()
测试
客户端请求
服务器响应
客户端接收
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/zsh142537/article/details/82418457


猜你喜欢
- 昨天碰到的,如果键是中文,如何进行匹配呢,先看文本内容: 这是字典里两个元素的内容,编码是utf-8,中文内容运行代码如下# -*- cod
- 1.Access数据库的DSN-less连接方法: set adocon=Server.Createobject(&q
- 一个有点绕的例子,用PyScripter调试器步进跟踪可以看清楚对 象结构的具体细节。对原作改变了一下,在未定义子对象属性时__getite
- 本文实例为大家分享了vue+moment实现倒计时的具体代码,供大家参考,具体内容如下示例代码<!-- 使用计算属性,传入截止日期 -
- python对函数库的引用方式1、import <库名> 例如:import turtle 如果需要使用库函数中的函数,需要使用
- 案例故事:百度网盘非会员大量上传文件,会弹出:“上传文件数量超出500个现在,开通超级会员后可继续上传”,其实是限制拖入500张相片,并非限
- 今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为其套上一个虚线矩
- 首先来说,让一个游戏赋有可玩性必须要动静结合。(哈哈,大家以为我要讲作文了。。。但其实我今天要讲的是Javascript)静态的东西谁不会做
- 1.安装下载网址:http://phantomjs.org/download.html选择合适的版本。然后解压即可。环境变量的配置:进入解压
- 这篇文章是为了对网络模型的权重输出,可以用来转换成其他框架的模型。import tensorflow as tffrom tensorflo
- 前言闲暇时间抽个空写了个三国杀武将手册的小程序,中间有个需求设计的是合成武将皮肤图、竖排的武将姓名、以及小程序码,然后提供保存图片到相册,最
- springboot数据库查询时出现的时区差异最近项目中使用到多数据源将MySQL库中的数据迁移到mongo库中,发现取出后的数据与原数据时
- Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持
- web2.0的标志是Ajax的异步通信的发掘,给我们带来像google map,google suggest 这样令人惊叹的东西。而Ajax
- Servermanager启动连接数据库错误运行mgrstart.bat报错如下解决办法:修改C:\Siemens\Teamcenter12
- RDPY 是基于 Twisted Python 实现的微软 RDP 远程桌面协议。RDPY 提供了如下 RDP 和 VNC 支持:●RDP
- 很多人都听过WAMP这个词吧,首先来看WAMP是什么意思?Windows下的Apache+MySQL+PHP,称为WAMP。属于WAMP环境
- 主要我是要解决一下几个问题: 1. apply和call的区别在哪里 2. apply的其他巧妙
- 很多朋友使用Dreamweaver一段时间后,开始热衷于寻找各式各样的插件,追求各种各样的特效,而对于Dreamweaver中的基本功能反而
- 列表 List列表是任意对象的集合,在 Python 中通过逗号分隔的对象序列括在方括号 ( [] ) 中people_list = [