標籤:max 使用 nbsp 一個 python ftp 網頁 head ftp服務
1 #用戶端和服務端: 2 大多數串連都是可靠的TCP串連。建立TCP串連時, 3 主動發起串連的叫用戶端, 4 被動響應串連的叫伺服器。 5 6 ##關於連接埠 7 連接埠號碼小於1024的是Internet標準服務的連接埠,例如SMTP服務是25連接埠,FTP服務是21連接埠,等等 8 連接埠號碼大於1024的,可以任意使用。 9 用戶端要主動發起TCP串連,必須知道伺服器的IP地址和連接埠號碼。10 作為伺服器,提供什麼樣的服務,連接埠號碼就必須固定下來。11 12 ##關於發送資料怎麼協調13 TCP串連建立的是雙向通道,雙方都可以同時給對方發資料。14 但是誰先發誰後發,怎麼協調,要根據具體的協議來決定。15 例如,HTTP協議規定用戶端必須先發請求給伺服器,伺服器收到後才發資料給用戶端。16 17 ---------------------用戶端----------------------------------18 19 # 匯入socket庫:20 import socket21 22 # 建立一個socket:23 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ##AF_INET指定使用IPv4協議,如果要用更先進的IPv6,就指定為AF_INET6。SOCK_STREAM指定使用面向流的TCP協議24 # 建立串連:25 s.connect((‘www.sina.com.cn‘, 80)) ##注意參數是一個tuple,包含地址和連接埠號碼。26 # 發送資料:27 s.send(b‘GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n‘) ##建立TCP串連後,我們就可以向新浪伺服器發送請求,要求返回首頁的內容:28 29 30 # 接收資料:31 buffer = []32 while True:33 # 每次最多接收1k位元組:34 d = s.recv(1024)35 if d:36 buffer.append(d)37 else:38 break39 data = b‘‘.join(buffer) ##接收資料時,調用recv(max)方法,一次最多接收指定的位元組數,因此,在一個while迴圈中反覆接收,直到recv()返回空資料,表示接收完畢,退出迴圈。40 41 42 # 關閉串連:43 s.close() ##當我們接收完資料後,調用close()方法關閉Socket,這樣,一次完整的網路通訊就結束了44 45 46 #接收到的資料包括HTTP頭和網頁本身,我們只需要把HTTP頭和網頁分離一下,把HTTP頭列印出來,網頁內容儲存到檔案47 header, html = data.split(b‘\r\n\r\n‘, 1)48 print(header.decode(‘utf-8‘))49 # 把接收的資料寫入檔案:50 with open(‘sina.html‘, ‘wb‘) as f:51 f.write(html)52 53 ##最後,現在,只需要在瀏覽器中開啟這個sina.html檔案,就可以看到新浪的首頁了。54 55 -------------------------服務端----------------------------------------
11 python socket網路編程