博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络基础、多线程、ftp任务铺垫
阅读量:2240 次
发布时间:2019-05-09

本文共 3381 字,大约阅读时间需要 11 分钟。

一、网络基础

学习网络编程,了解一些网络基础的知识是必不可少的,下面学习一些基础的网络知识:

1、我们的电脑里有网卡,网卡里有mac地址;

2、我到某个地方插上网线,路由器或交换机中的DHCP服务为我自动分配IP地址。

  IP: 192.168.13.84

              IPv4

                     00000000.00000000.00000000.00000000

                     0~255    0~255    0~255    0~255

              IPv6

                     00000000.00000000.00000000.00000000.00000000.00000000

       子网掩码:255.255.255.0

       网关IP:192.168.13.1

       局域网内、城域网、广域网:

              广播

              单播

              广播风暴

              arp协议

3、DNS

网络连接:

              - 域名解析

                     www.baidu.com  220.181.57.216

              - 连接

                     sk = socket.socket()

                     sk.connect(('47.95.64.113',80))

                                   ...

       问题来了,域名和IP的对应关系在哪里?

              本地:

                     Win本地电脑:

                            C:\Windows\System32\drivers\etc\hosts

                            11.22.33.44 www.baidu.com

                     Linux/Mac电脑:

                            /etc/hosts

                           

              DNS服务器:全球顶级DNS服务器13台

                     www.luffycity.com  47.95.64.113

                                  

       创业:  a. 租一个服务器+公网IP

                     b. 租域名

                            域名+IP解析

 

总结:

  1. DHCP,自动位局域网内容电脑分配IP。

       2. 网关,路由器中连接交换机的口。

       3. IP,4个点分的十进制表示  192.11.111.11

       4. 子网掩码,

              IP: 192.168.13.99

              掩码:255.255.255.0

                     将挡住的IP位数作为网段。

                     未挡住的部分作为可变的值。

       5. 局域网/城域网/广域网

       6. arp协议

       7. DNS

二、多线程

       线程,英文是Thread,每个正在系统上运行的程度都是一个进程。每个进程包含一到多个线程。线程是程序中一个单一的顺序控制流程,在单个程序中同时运行多个线程完成不同的工作,称为多线程。下面就是一个多线程的示例:

  import time  import threading  def task(a1,a2,a3):      time.sleep(2)      print('去拿快递')  def work():      print('去写作业')  def wm():      print('去拿外卖')  # 创建一个线程  让该线程去执行任务:函数  t1 = threading.Thread(target=task,args=(1,2,3,))  t1.start()  # 去执行吧  # 创建一个线程  让该线程去执行任务:函数  t2 = threading.Thread(target=work)  t2.start()  # 去执行吧  # 创建一个线程  让该线程去执行任务:函数  t3 = threading.Thread(target=wm)  t3.start()  # 去执行吧  print('玩扇子')  print('煽风点火')  print('耍贱...')   # 分析:该程序创建了三个线程,分别去执行不同的任务(函数),主线程可以继续向下走。

  再看下面socket和线程配合的示例:

    import time  import socket  import threading  def task(conn):      time.sleep(2)      data = conn.recv(1024)      print(data)      conn.close()  server = socket.socket()  server.bind(('127.0.0.1',8001,))  server.listen(5)  while True:      conn,addr = server.accept()      t = threading.Thread(target=task,args=(conn,))      t.start()

  注意:以后如果想要提高效率可以使用多线程。如下示例,使用多线程下载多个图片:

"""    安装requests模块:在终端执行如下命令自动安装(连网状态):    pip3 install requests    """    import threading    import requests    import uuid    url_list = [            'https://www3.autoimg.cn/newsdfs/g28/M05/F9/98/120x90_0_autohomecar__ChsEnluQmUmARAhAAAFES6mpmTM281.jpg',    'https://www2.autoimg.cn/newsdfs/g28/M09/FC/06/120x90_0_autohomecar__ChcCR1uQlD6AT4P3AAGRMJX7834274.jpg',    'https://www2.autoimg.cn/newsdfs/g3/M00/C6/A9/120x90_0_autohomecar__ChsEkVuPsdqAQz3zAAEYvWuAspI061.jpg',]    def task(url):        """        1. DNS解析,根据域名解析出IP        2. 创建socket客户端    sk = socket.socket()        3. 向服务端发起连接请求 sk.connect()        4. 发送数据(我要图片) sk.send(...)        5. 接收数据            sk.recv(8096)        接收到数据后写入文件。        """        ret = requests.get(url)        file_name = str(uuid.uuid4()) + '.jpg'        with open(file_name, mode='wb') as f:            f.write(ret.content)    for url in url_list:        t = threading.Thread(target=task, args=(url,))        t.start()
多线程下载图片

  补充:uuid模块,模块uuid4()可以随机生成一个字符串,上述示例利用此模块给下载的图片命名:

import uuid    v = str(uuid.uuid4())    print(v)  # d6b404d7-aa20-46f8-a135-90b624982f24

三、ftp任务铺垫

       1. 多用户同时登陆:     socketserver

       2. 用户登陆,加密认证: md5加密

       3. 上传/下载文件,保证文件一致性:md5摘要

       4. 传输过程中现实进度条

  5. 不同用户家目录不同,且只能访问自己的家目录, 上传下载时,必须在自己目录: os.path.join('D:\sylar\nbftp_server\users',username,'a.text')

       6. 对用户进行磁盘配额、不同用户配额可不同:   上传、下载之前做文件夹大小的判断。

       7. 用户登陆server后,可在家目录权限下切换子目录: 

    客户端向服务端发命令,subprocess.popen(命令)

       8. 查看当前目录下文件,新建文件夹              : 执行命令

       9. 删除文件和空文件夹                          : 执行命令

       10. 充分使用面向对象知识+反射

       11. 支持断点续传                               :断点续传

 

转载于:https://www.cnblogs.com/li-li/p/9599591.html

你可能感兴趣的文章
检测iOS的网络可用性并打开网络设置
查看>>
简单封装FMDB操作sqlite的模板
查看>>
iOS开发中Instruments的用法
查看>>
强引用 软引用 弱引用 虚引用
查看>>
数据类型 java转换
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
C结构体、C++结构体、C++类的区别
查看>>
进程和线程的概念、区别和联系
查看>>
CMake 入门实战
查看>>
绑定CPU逻辑核心的利器——taskset
查看>>
Linux下perf性能测试火焰图只显示函数地址不显示函数名的问题
查看>>
c结构体、c++结构体和c++类的区别以及错误纠正
查看>>
Linux下查看根目录各文件内存占用情况
查看>>
A星算法详解(个人认为最详细,最通俗易懂的一个版本)
查看>>
利用栈实现DFS
查看>>
(PAT 1019) General Palindromic Number (进制转换)
查看>>
(PAT 1073) Scientific Notation (字符串模拟题)
查看>>
(PAT 1080) Graduate Admission (排序)
查看>>
Play on Words UVA - 10129 (欧拉路径)
查看>>