標籤:python 3.1 byte bytes etc recv 網卡 廣播風暴 jpg
一. py2/py3區別
- 編碼&字串
字串:
py2:
unicode v = u"root" 本質上用unicode儲存(萬國碼)
(str/bytes) v = "root" 本質用位元組儲存
py3:
str v = "root" 本質上用unicode儲存(萬國碼)
bytes v = b"root" 本質上用位元組儲存
編碼:
py2:
- ascii
檔案頭可以修改:#-*- encoding:utf-8 -*-
py3:
- utf-8
檔案頭可以修改:#-*- encoding:utf-8 -*-
注意:檔案是如何儲存?
- 繼承
py2: 經典類/新式類
py3: 新式類
- 範圍
py2:range/xrange
py3: range
- 輸入
py2: v1 = raw_input(‘請輸入使用者名稱:‘)
py3: v2 = input(‘請輸入使用者名稱:‘)
- 列印
py2: print ‘xx‘
py3: print(123)
二. 列表產生式
v = [lambda x: x + i for i in range(10)]
print(v) # 10個記憶體位址組成的列表
三. 網路編程
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
192.168.13.84
255.255.255.0 # 也可以是255.255.254.0
192.168.12.84
255.255.255.0
將擋住的IP位元作為網段。
未擋住的部分作為可變的值。
網關IP:192.168.13.1
區域網路內、城域網、廣域網路:
廣播
單播
廣播風暴
arp協議
DNS
網路連接:
- 網域名稱解析
www.bitfinex.com 127.91.64.33
- 串連
sk = socket.socket()
sk.connect((‘47.95.64.113‘,80))
...
問題來了,網域名稱和IP的對應關係在哪裡?
本地:
Win本地電腦:
C:\Windows\System32\drivers\etc\hosts
11.11.11.11 bitifnex.com
Linux/Mac電腦:
/etc/hosts
DNS伺服器:全球頂級DNS伺服器13台
www.bitfinex.com 127.91.64.33
創業:
a. 租一個伺服器+公網IP
b. 租網域名稱
網域名稱+IP解析
四. socketserver
注意:如果想要提高效率可以使用多線程。
""" 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()
五. 線程
import timeimport threadingdef task(n): print(‘開始執行任務:‘,n) time.sleep(10) print(‘...‘) print(‘任務%s 執行完畢:‘%n)while True: name = input("請輸入任務:") t = threading.Thread(target=task,args=(name,)) t.start()
六. uuid模組
import uuidv = str(uuid.uuid4())print(v)
py2/py3區別, 列表產生式, 網路編程, socketserver, 線程, uuid模組