python写一个文件下载器_python使用tcp实现一个简单的下载器

上一篇中介绍了tcp的流程,本篇通过写一个简单的文件下载器程序来巩固之前学的知识。

文件下载器的流程如下:

客户端:

输入目标服务器的ip和port

输入要下载文件的名称

从服务器下载文件保存到本地

服务器端 :

接收客户端要下载的文件名称

从本地的文件中找到该文件

将文件的内容传输给客户端

文件下载客户端

示例代码如下:

import socket

def main():

# 创建套接字

tcp_socket_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 链接的服务器信息

server_ip = input("请输入服务器ip:")

server_port = int(input("请输入服务器port:"))

# 连接服务器

tcp_socket_client.connect((server_ip, server_port))

# 输入下载的文件名称

file_name = input("请输入要下载的文件名:")

# 向服务器发送文件名

tcp_socket_client.send(file_name.encode("utf-8"))

# 接收服务器的文件内容

# 最大大小为1K

recv_data = tcp_socket_client.recv(1024)

# 写入接收到的数据

# 接收到数据时才写入数据

if recv_data:

with open("[new]" + file_name, 'wb') as f:

f.write(recv_data)

tcp_socket_client.close()

if __name__ == '__main__':

main()

文件下载服务器端

示例代码如下:

import socket

def read_file_content(file_name):

"""读取文件内容"""

try:

with open(file_name, "rb") as f:

content = f.read()

return content

except:

print("要下载的文件不存在:%s" % file_name)

def main():

# 创建套接字

tcp_socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定端口

local_addr = ("", 8900)

tcp_socket_server.bind(local_addr)

# 将主动套接字改为被动套接字

tcp_socket_server.listen(128)

while True:

client_socket, client_addr = tcp_socket_server.accept()

print("新的客户端链接了:%s" % str(client_addr))

# 接收数据

recv_data = client_socket.recv(1024)

file_name = recv_data.decode("utf-8")

print("客户端请求下载的文件是:%s" % file_name)

file_content = read_file_content(file_name)

if file_content:

client_socket.send(file_content)

# 关闭客户端套接字

client_socket.close()

# 关闭

tcp_socket_server.close()

if __name__ == '__main__':

main()

操作流程

启动服务器端

$ python3 downloader-server.py

启动客户端,并输入服务器端的信息已经要下载的文件

$ ptrhon3 downloader-client.py

请输入服务器ip:192.168.92.130

请输入服务器port:8900

请输入要下载的文件名:test.txt

客户端在当前目录下有一个[new]test.txt的文件表示下载成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值