python实现简单的tcp 文件下载

什么是下载?

首先客户端会问服务器,有没有一个xxx的文件啊?服务器开始寻找,找到后对客户端说有,然后客户端在本地新建一个文件,客户端从服务器收到一点数据,就写进这个文件中,再收到一点数据,再写入这个文件中,只要把所有的接收到的数据都写入到这个文件中,就完成了下载的操作。

所以下载需要2个部分。服务器的发送方和客户端的接收方。

我们这里不考虑复杂的情况。什么限速啊,验证啊,文件大小......只实现最简单的逻辑。

客户端参考代码

import socket

def main():

  # 创建socket
  tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  # 目的信息
  server_ip = input("请输入服务器ip:")
  server_port = int(input("请输入服务器port:"))

  # 链接服务器
  tcp_client_socket.connect((server_ip, server_port))

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

  # 发送文件下载请求
  tcp_client_socket.send(file_name.encode("utf-8"))

  # 接收对方发送过来的数据,最大接收1024个字节(1K)
  recv_data = tcp_client_socket.recv(1024)
  # 如果接收到数据再创建文件,否则不创建
  if recv_data:
    with open("[接收]"+file_name, "wb") as f:
      f.write(recv_data)

  # 关闭套接字
  tcp_client_socket.close()

if __name__ == "__main__":
  main()

服务端参考代码

import socket
import sys

def get_file_content(file_name):
  """获取文件的内容"""
  try:
    with open(file_name, "rb") as f:
      content = f.read()
    return content
  except:
    print("没有下载的文件:%s" % file_name)

def main():

  if len(sys.argv) != 2:
    print("请按照如下方式运行:python3 xxx.py 7890")
    return
  else:
    # 运行方式为python3 xxx.py 7890
    port = int(sys.argv[1])

  # 创建socket
  tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # 本地信息
  address = ('', port)
  # 绑定本地信息
  tcp_server_socket.bind(address)
  # 将主动套接字变为被动套接字
  tcp_server_socket.listen(128)

  while True:
    # 等待客户端的链接,即为这个客户端发送文件
    client_socket, clientAddr = tcp_server_socket.accept()
    # 接收对方发送过来的数据
    recv_data = client_socket.recv(1024) # 接收1024个字节
    file_name = recv_data.decode("utf-8")
    print("对方请求下载的文件名为:%s" % file_name)
    file_content = get_file_content(file_name)
    # 发送文件的数据给客户端
    # 因为获取打开文件时是以rb方式打开,所以file_content中的数据已经是二进制的格式,因此不需要encode编码
    if file_content:
      client_socket.send(file_content)
    # 关闭这个套接字
    client_socket.close()

  # 关闭监听套接字
  tcp_server_socket.close()

if __name__ == "__main__":
  main()

以上就是python实现简单的tcp文件下载的详细内容,更多关于python tcp下载的资料请关注我们其它相关文章!

(0)

相关推荐

  • python实现TCP文件传输

    前几天已经讲过了UDP协议下大文件传输的python实现代码,今天再实现TCP协议下大文件传输的python实现代码. TCP和UDP的实现过程还是比较不一样的. 实现代码: 服务端: import socket import time s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(('127.0.0.1',9999)) s.listen(5) print('Waiting for connection...') whil

  • python基于TCP实现的文件下载器功能案例

    本文实例讲述了python基于TCP实现的文件下载器功能.分享给大家供大家参考,具体如下: 服务器 参考代码如下: from socket import * import sys def get_file_content(file_name): """获取文件的内容""" try: with open(file_name, "rb") as f: content = f.read() return content except

  • Python TCP通信客户端服务端代码实例

    这篇文章主要介绍了Python TCP通信客户端服务端代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 TCP客户端: import argparse, socket,sys import time # socket.setdefaulttimeout(20) def recvall(sock, length): data = b'' while len(data) < length: more = sock.recv(length -

  • Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】

    本文实例讲述了Python 网络编程之TCP客户端/服务端功能.分享给大家供大家参考,具体如下: demo.py(TCP客户端): import socket def main(): # 1. 创建tcp的套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 链接服务器 # tcp_socket.connect(("192.168.33.11", 7890)) server_ip = input(

  • python TCP包注入方式

    我就废话不多说了,大家还是直接看代码吧! #! /usr/bin/env python import socket import struct def checksum(data): s = 0 n = len(data) % 2 for i in range(0, len(data)-n, 2): s+= ord(data[i]) + (ord(data[i+1]) << 8) if n: s+= ord(data[i+1]) while (s >> 16): s = (s &a

  • 详解python tcp编程

    网络连接与通信是我们学习任何编程语言都绕不过的知识点. Python 也不例外,本文就介绍因特网的核心协议 TCP ,以及如何用 Python 实现 TCP 的连接与通信. TCP 协议 TCP协议(Transmission Control Protocol, 传输控制协议)是一种面向连接的传输层通信协议,它能提供高可靠性通信,像 HTTP/HTTPS 等网络服务都采用 TCP 协议通讯.那么网络通讯方面都会涉及到 socket 编程,当然也包括 TCP 协议. Network Socket 我

  • Python3使用TCP编写一个简易的文件下载器功能

    利用Python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱.下面代码就是模拟客户端通过命令行操作服务器.客户端输入命令,服务器执行并且返回结果. TCP(Transmission Control Protocol 传输控制协议):是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义. 使用TCP编写一个简易的文件下载器要求:需编写文件下载器服务端和文件下载器客户

  • Python网络编程之使用TCP方式传输文件操作示例

    本文实例讲述了Python网络编程之使用TCP方式传输文件操作.分享给大家供大家参考,具体如下: TCP文件下载器 客户端 需求:输入要下载的文件名,从服务器端将文件拷贝到本地 步骤: 1.创建TCP套接字,绑定端口 2.连接服务端 3.输入要下载的文件名 4.将文件名编码,并发送到服务端 5.接收服务端返回的数据 6.关闭套接字 代码 # 导入模块 import socket # 创建套接字 tcp_client_socket = socket.socket(socket.AF_INET, s

  • Python实现TCP通信的示例代码

    使用socket实现tcp通信,需导入socket模块 1.服务端 主要步骤: (1)创建socket:socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) family:AF_INET , AF_INET6, AF_UNIX, AF_CAN, AF_PACKET,  AF_RDS type:SOCK_STREAM , SOCK_DGRAM, SOCK_RAW,或者其他SOCK_* proto:一般使用默认值0

  • python实现简单的tcp 文件下载

    什么是下载? 首先客户端会问服务器,有没有一个xxx的文件啊?服务器开始寻找,找到后对客户端说有,然后客户端在本地新建一个文件,客户端从服务器收到一点数据,就写进这个文件中,再收到一点数据,再写入这个文件中,只要把所有的接收到的数据都写入到这个文件中,就完成了下载的操作. 所以下载需要2个部分.服务器的发送方和客户端的接收方. 我们这里不考虑复杂的情况.什么限速啊,验证啊,文件大小......只实现最简单的逻辑. 客户端参考代码 import socket def main(): # 创建soc

  • python实现简单的TCP代理服务器

    本文实例讲述了python实现简单的TCP代理服务器的方法,分享给大家供大家参考. 具体实现代码如下: # -*- coding: utf-8 -*- ''' filename:rtcp.py @desc: 利用python的socket端口转发,用于远程维护 如果连接不到远程,会sleep 36s,最多尝试200(即两小时) @usage: ./rtcp.py stream1 stream2 stream为:l:port或c:host:port l:port表示监听指定的本地端口 c:host

  • Python简单实现TCP包发送十六进制数据的方法

    本文实例讲述了Python简单实现TCP包发送十六进制数据的方法.分享给大家供大家参考,具体如下: 举例: 0x12, 0x34可以直接拼成 "\x12\x34". 客户端代码示例: #-*- encoding: utf-8 -*- import json import socket import sys import binascii reload(sys) sys.setdefaultencoding('utf-8') if __name__=="__main__&quo

  • Python网络编程之TCP套接字简单用法示例

    本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而java则一知半解,C写起来又麻烦,所以一直都没有真正实现过TCP套接字编程. 最近学习了python,而用它来写套接字又十分方便简单,所以当然要试一试咯. 下面根据代码来介绍一下最简单的tcp程序,由客户端输入数据,发送给服务器,服务器加上时间后返回给客户端 #!/usr/bin/python 'test TCP server' from socke

  • python实现简单socket通信的方法

    本文实例讲述了python实现简单socket通信的方法.分享给大家供大家参考,具体如下: 刚刚开始接触python,实现了一个helloworld程序---关于udp协议的socket通信demo. 首先服务端这边的实现如下: import socket, traceback host = '' # Bind to all interfaces port = 51500 # Step1: 创建socket对象 s = socket.socket(socket.AF_INET, socket.S

  • 使用Python实现简单的服务器功能

    socket接口是实际上是操作系统提供的系统调用.socket的使用并不局限于Python语言,你可以用C或者Java来写出同样的socket服务器,而所有语言使用socket的方式都类似(Apache就是使用C实现的服务器) Web框架就是提前写好了服务器.不能跨语言的使用框架.框架的好处在于帮你处理了一些细节,从而实现快速开发,但同时受到python本身性能的限制.我们已经看到,许多成功的网站都是利用动态语言(比如Python, Ruby或者PHP,比如twitter和facebook)快速

  • python使用socket创建tcp服务器和客户端

    python使用socket创建tcp服务器和客户端. 服务器端为一个时间戳服务器,在接收到客户端发来的数据后,自动回复. 客户端,等待用户输入,回车后向服务器发送用户输入的内容. 分别在python2.7和python3.6下测试.在启动时需要先启动服务器端,在启动客户端. python2.7下 服务器端代码为 #coding:utf-8 from socket import * from time import ctime print("=====================时间戳TCP

  • python实现简单聊天室功能 可以私聊

    本文实例为大家分享了python实现简单聊天室功能的具体代码,供大家参考,具体内容如下 公共模块 首先写一个公共类,用字典的形式对数据的收发,并且进行封装,导入struct解决了TCP的粘包问题,并在公共类中进行了异常处理 import socket,struct,json def send_dic(c,dic): dic_json=json.dumps(dic) dic_json_length=len(dic_json.encode('utf-8')) struct_dic_json_leng

  • python 实现简单的FTP程序

    FTP即文件传输协议:它基于客户机-服务器模型体系结构,应用广泛.它有两个通道:一个命令通道和一个数据通道.命令通道用于控制通信,数据通道用于文件的实际传输.使用FTP可以做很多事情,比如移动.下载.复制文件等. 一.开发环境 server端:centos 7  python-3.6.2 客户端:Windows 7 python-3.6.2 pycharm-2018 程序目的:1.学习使用socketserver实现并发处理多个客户端.            2.了解使用struct解决TCP粘

  • 用Python实现简单的人脸识别功能步骤详解

    前言 让我的电脑认识我,我的电脑只有认识我,才配称之为我的电脑! 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确性比较高的一种. 一.首先 梳理一下实现人脸识别需要进行的步骤: 流程大致如此,在此之前,要先让人脸被准确的找出来,也就是能准确区分人脸的分类器,在这里我们可以用已经训练好的分类器,网上种类较全,分类准确度也比较高,我们也可以节约在这方面花

随机推荐