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