文件下载器(python-tcp)

本文档介绍了一个基于TCP协议的文件下载器的实现,包括客户端和服务器的流程及代码。首先讨论了为什么选择TCP而非UDP,因为TCP确保数据的有序、完整传输,适合文件下载。客户端通过连接服务器,发送文件名请求,接收并保存服务器响应的文件内容。服务器则监听连接,接收文件名,检查文件存在性,并返回文件内容或关闭连接。

文件下载器

    在写整个小项目之前,我们需要确定,需要用什么协议来写这个呢?是UDP还是TCP?

一、选UDP还是TCP?

    我们知道,UDP是面向无连接的,即发送的信息是在不知道对方是否能接受到消息的情况下。而TCP是面向连接的,即发送信息是在已知对方一定能收到信息的情况下发送的。

    并且文件是需要确保每个字节都需要发送到,因此如果选用UDP作为传输协议,那么很可能出现丢包的情况,导致传输过来的文件出现缺失。但是TCP就不会出现这样的情况,它的三次握手会确保客户端与服务器连接,并且确保每个字节都能传到。

下面来整理一下TCP与UDP的区别

  • 面向连接(确认有创建三方交握,连接已创建才作传输。)
  • 有序数据传输
  • 重发丢失的数据包
  • 舍弃重复的数据包
  • 无差错的数据传输
  • 阻塞/流量控制

那么接下来我们就用TCP协议来写一个文件下载器

二、文件下载器-客户端

2.1 客户端的基本流程

  1. 创建套接字
  2. 连接服务器
  3. 发送/接收数据
  4. 关闭客户端

2.2 本次客户端主要操作

  1. 客户端与服务器相连
  2. 发送需要下载的文件名
  3. 服务器发送相应的内容:
    1. 如果服务器存在该文件,则返回该文件经过编码的二进制内容,并且客户端在本地创建相应的文件名,然后将内容输入。
    2. 如果服务器不存在该文件,则不进行任何操作

2.3 代码

# -*- coding: utf-8 -*-
from socket import *


def main():
    # 创建socket
    tcp_client_socket = socket(AF_INET, SOCK_STREAM)

    # 目的信息,当然如果是自己测试完全不需要这样走
    server_ip = input("请输入服务器ip:")
    server_port = int(input("请输入服务器port:"))

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值