網絡基礎、多線程、ftp任務鋪墊

1、網絡基礎python

學習網絡編程,瞭解一些網絡基礎的知識是必不可少的,下面學習一些基礎的網絡知識:編程

一、咱們的電腦裏有網卡,網卡里有mac地址;服務器

二、我到某個地方插上網線,路由器或交換機中的DHCP服務爲我自動分配IP地址。網絡

  IP: 192.168.13.84多線程

              IPv4socket

                     00000000.00000000.00000000.00000000ide

                     0~255    0~255    0~255    0~255學習

              IPv6ui

                     00000000.00000000.00000000.00000000.00000000.00000000加密

       子網掩碼:255.255.255.0

       網關IP:192.168.13.1

       局域網內、城域網、廣域網:

              廣播

              單播

              廣播風暴

              arp協議

三、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

2、多線程

       線程,英文是Thread,每一個正在系統上運行的程度都是一個進程。每一個進程包含一到多個線程。線程是程序中一個單一的順序控制流程,在單個程序中同時運行多個線程完成不一樣的工做,稱爲多線程

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()
多線程下載圖片

3、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. 支持斷點續傳                               :斷點續傳

相關文章
相關標籤/搜索