文件下载器
在写整个小项目之前,我们需要确定,需要用什么协议来写这个呢?是UDP还是TCP?
一、选UDP还是TCP?
我们知道,UDP是面向无连接的,即发送的信息是在不知道对方是否能接受到消息的情况下。而TCP是面向连接的,即发送信息是在已知对方一定能收到信息的情况下发送的。
并且文件是需要确保每个字节都需要发送到,因此如果选用UDP作为传输协议,那么很可能出现丢包的情况,导致传输过来的文件出现缺失。但是TCP就不会出现这样的情况,它的三次握手会确保客户端与服务器连接,并且确保每个字节都能传到。
下面来整理一下TCP与UDP的区别:
- 面向连接(确认有创建三方交握,连接已创建才作传输。)
- 有序数据传输
- 重发丢失的数据包
- 舍弃重复的数据包
- 无差错的数据传输
- 阻塞/流量控制
那么接下来我们就用TCP协议来写一个文件下载器
二、文件下载器-客户端
2.1 客户端的基本流程
- 创建套接字
- 连接服务器
- 发送/接收数据
- 关闭客户端
2.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:"))