Python socket实现的文件下载器功能示例
作者:独听钟声晚 发布时间:2021-03-12 22:43:19
标签:Python,socket,文件下载器
本文实例讲述了Python socket实现的文件下载器功能。分享给大家供大家参考,具体如下:
文件下载器
先写客户端再写服务端
1.tcp下载器客户端
import socket
def main():
# 创建套接字
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 获取服务器ip和port
dest_ip = input("请输入下载服务器的ip:")
dest_port = int(input("请输入下载服务器的port:"))
# 连接服务器
tcp_socket.connect((dest_ip,dest_port))
# 获取下载的文件名称
download_file_name = input("请输入要下载的文件名称:")
# 将文件名称发送到服务器
tcp_socket.send(download_file_name.encode("gbk"))
# 接收文件中的数据
recv_data = tcp_socket.recv(1024) # 1024=1k 1024*1024=1M
if recv_data:
# 保存接收到的数据到新文件
with open("[新]"+download_file_name.wb) as f:
f.write(recv_data)
# 关闭套接字
tcp_socket.close()
if __name__ == '__main__':
main()
2.tcp下载器服务端
import socket
def send_file_2_client(new_client_socket,client_addr):
# 1.接收客户端需要下载的文件名
file_name = new_client_socket.recv(1024).decode("gbk")
print("客户端(%s)需要下载的文件是:%s" %(str(client_addr),file_name))
file_content = None
# 2.打开这个文件,读取数据
try:
f = open(file_name,"rb")
file_content = f.read()
f.close()
except Exception as ret:
print("没有要下载的文件(%s)" % file_name)
# 3.发送文件数据给客户端
if file_content:
new_client_socket.send(file_content)
def main():
# 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定本地信息
tcp_server_socket.bind("",7890)
# 让默认套接字由主动变为被动listen
tcp_server_socket.listen(128)
while True:
# 等待客户端的连接 accept
new_client_socket ,client_addr = tcp_server_socket.accept()
# 调用发送文件函数,完成客户端的服务
send_file_2_client(new_client_socket,client_addr)
# 关闭套接字
new_client_socket.close()
tcp_server_socket.close()
if __name__ == "__main__":
main()
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/weixin_44321116/article/details/96575261


猜你喜欢
- Python的五个标准数据类型数字字符串列表元组字典一、数字不可变数据类型,存储值为数值1.创建对象,分配数值例:>>>
- 运行多进程 每个子进程的内存空间是互相隔离的 进程之间数据不能共享的互斥锁但是进程之间都是运行在一个操作系统上,进程之间数据不共享,但是共享
- 1.SQL 插入语句得到自动生成的递增ID值 insert into Table1(Name,des,num) values ('l
- 废话不多说,直接上代码/** * lhgcalendar时间插件限制只能选择三个月 * @d 获取到的开始时间 * @m 要限制的时间的长度
- 前言GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护
- vi /etc/freetds/freetds.conf [global]# TDS protocol versiontds version
- 导言本文简单介绍了如何从网易财经获取某支股票的价格数据,并根据价格数据画出相应的日K线图。有助于新手了解并使用Python的相关功能。包括列
- Python项目打包python本身是一种脚本语音,发布的话,直接发布源代码就可以了,但是,可能有些公司并不想发布源代码,那么,就涉及到打包
- 数据表DROP TABLE IF EXISTS tb_score;CREATE TABLE tb_score( i
- 本质是一个普通的js对象,用于描述视图界面结构的,在mouted的回调中,可以输出_vnode, 通过图可以知道,_vnode中有
- 一.MYSQL的命令行模式的设置桌面->我的电脑->属性->环境变量->新建->PATH=“;path\mys
- 前言本文将讲述怎么通过 MySql 的日志 binlog 文件进行数据恢复。通过已备份数据 加上 binlog 文件恢复上次备份到删除之间的
- 从ASP初入门到PHP,感觉到PHP的强大之一就是内置函数的丰富,比如先前学习的PHP日期时间函数,读写文件的相关函数等都无不表明了PHP的
- 前言写这篇博客的初衷是加深自己对网络请求发送和响应的理解,仅供学习使用,请勿用于非法用途!文明爬虫,从我做起。下面进入正题。获取歌曲信息列表
- 疫情终于有所好转了,感谢所有的为之奋斗的白衣天使们,你们是最棒的!赞!白衣天使们在前线奋战,我们也总不能总在家里躺着做贡献,也要加强学习,争
- scratch-blocks编译的时候会出现的问题:scratch-gui依赖的scratch-blocks模块在安装的时候编译会报错。原因
- 这片文章只对本地存储方法做介绍,若要查看本地存储组件使用方法的介绍请稍等。本地数据持久化(或者也叫做浏览器本地存储)是一种在浏览器中长久保存
- 安装pyserialpip install pyserial查看可用的端口# coding:utf-8import serial.tools
- 看到一篇Implementing an Infinite Scroll with Vue.js , 觉得挺实用的就看了下, 顺便简单翻译了一
- 经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响。所以本文我们将和