Python socket实现的文件下载器功能示例

yipeiwu_com5年前Python基础

本文实例讲述了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相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

Python中的jquery PyQuery库使用小结

pyquery库是jQuery的Python实现,可以用于解析HTML网页内容,使用方法:复制代码 代码如下:from pyquery import PyQuery as pq1、可加载...

Python脚本获取操作系统版本信息

Python脚本获取操作系统版本信息

查看系统版本信息是一件家常便饭的事情,有时候需要将版本信息录入到资产管理系统中,如果每次手动的去查询这些信息再录入系统那么是一件令人呢头疼的事情,如果采用脚本去完成这件事情,那么情况就有...

python: 自动安装缺失库文件的方法

Method 通过一条指令即可完成: os.system('所需指令') Note: os.system('所需指令') 还可以完成许多其他任务,非常强大。 Example...

Python入门之后再看点什么好?

不止一次在微信、知乎有读者朋友跑过来问:看完了基础书,甚至看两遍了,但自己写的时候还是没思路,我该怎么办? 编程在我看来就是一门手艺活,绝不是简单通过看书就能学会的,跟学游泳、学车、学钢...

tornado框架blog模块分析与使用

复制代码 代码如下:#!/usr/bin/env python## Copyright 2009 Facebook## Licensed under the Apache License...