基於python3網路
網路程式設計
-
網路:
-
網路協議:一套規則
-
網路模型七層模型-七層 物理層 資料鏈路層 網路層 傳輸層 會話層 表示層 應用層四層模型 鏈路層 網路層 傳輸層 應用層
-
每一層都有相應的協議負責交換資訊或者協同工作
-
TCP/IP協議 協議族
-
IP地址:負責網路上唯一定位一個機器IP地址分5類3點4段式,每個欄位是0~255127.0.0.1:本機IPV4 IPV6
-
埠號範圍:0-65535 知名埠:0——1023已經知名的埠 非知名埠:1024->
TCP/UDP 協議
-
UDP:非安全的不面向連結的傳輸
-
安全性差
-
大小限制64kb
-
沒有順序
-
速度快
-
-
TCP
-
基於連結的通訊
-
-
SOCKET程式設計
-
socket(套接字):這是一個網路通訊的端點,實現不同主機的程序通訊
-
通過IP+埠定位對方併發送資訊的通訊機制
-
分為UDP和TC P
-
-
UDP 程式設計Server端流程
-
1.建立socket.socket是負責具體通訊的一個例項
-
2.繫結,為建立socket指派固定的埠和IP地址
-
3.接受對方傳送的內容
-
4.給對方傳送反饋,
-
此步驟為非必需步驟Client端流程:
-
1.建立通訊的socket
-
2.傳送內容到指定伺服器 3
-
.接受伺服器的反饋資訊
-
服務端案例V01
-
import socket def serverFunc(): #AF_INET使用IPv4協議 SOCK_DGRAM使用UDP協議 soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #繫結IP和埠號 addr = ('127.0.0.1',10089) soc.bind(addr) #接受訪問 data,addr = sco.recvfrom(500) print(data) #需要將資料進行解碼才可以進行讀取 data = data.deconde() print(data) #給對方的反饋資訊 res = '反饋資訊' #將資料進行編碼傳送 res = res.encode() soc.sendto(res,addr) if __name__ == "__main__": print('Start Server...') serverFunc() print('End Server.....')
-
客戶端案例V02
-
import socket def clientFunc(): soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) text = '來自客戶端的訪問' data = text.encode() soc.sendto(data,('127.0.0.1',10089)) data,addr = socket.recvfrom(200) data = data.decode() print(data) if __name__ == '__main__': print("client...") clientFunc() print("end client...")
-
伺服器要求永久執行案例V03
import socket import time def serverFunc(): soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) addr = ('127.0.0.1',10089) soc.bind(addr) data,addr = soc.recvfrom(500) data = data.decode() print(data) res = '來自伺服器的反饋資訊' res = res.encode() soc.sendto(res,addr) if __name__ == '__main__': print('Start Server..') while True: try: serverFunc() except Exceptiom as e: print(e) time.sleep(1) print('end Server...')
-
-
-
-
TCP程式設計
-
面向連結傳輸,及每次傳輸之前需要建立連線
-
客戶端和服務端倆個程式需要編寫
-
Server端的編寫流程:
-
1.建立socket負責具體通訊,這個socket其實只負責接受對方的請求
-
2.繫結埠號和地址
-
3.監聽接入的訪問socket
-
4.接受訪問的socket,可以理解接受訪問即建立了一個通訊的連線.
-
5.接受對方的傳送內容,利用接收到的socket接收內容
-
6.如過有必要,給對方傳送反饋資訊
-
7.關閉連結
-
#匯入包 import socket def TCP_Server(): #AF_INET使用IPV4協議,SOC_STREAM使用TCP soc = socket.socket(socket.AF_INET,sockey.SOC_STREAM) addr = ('127.0.0.1',10089) #繫結地址和埠號 soc.bind(addr) #監聽網路 soc.listen() while True: #返回值為內容和連結地址 skt,addr = soc.accept() msg = skt.recv(500) data = msg.decode() rest = "recvide msg : {0} from {1}".formate(data,addr) print(rest) skt.send(rest.encode()) skt.close() if __name__ == "__main__": print("Start Server...") TCP_Server()
-
-
Client 端流程:
-
1.建立通訊的socket
-
2.連結對方,請求跟對方遠端連結
-
3.傳送內容到對方伺服器
-
4.接受對方的反饋
-
5.關閉鏈路的接通案例V04 V05
-
import socket def TCP_Clinet(): sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) addr = ('127.0.0.1',10089) scok.bind(addr) msg = "這是一跳客戶端的資訊" sock.send(msg.encode) res = sock.recv(500) print(res.decode) sock.close() if __name__ == "__main__": TCP_Client()
-
-
-
FTP程式設計
-
FTP(FileTransferProtocal)檔案傳輸協議
-
用途:定製一些特殊的上穿下載檔案的服務
-
使用者分類:登陸FTP伺服器需要一個賬號
-
Real:賬戶
-
Guest:可對臨時對某一類人的行為進行授權
-
Anonymous:匿名賬戶,允許任何人。
-
-
-
FTP工作流程
-
客戶端連結遠端主機上的FTP伺服器
-
客戶端輸入使用者名稱和密碼(或者“anonymous”和電子郵件地址)
-
客戶端和伺服器進行各種檔案傳輸和資訊查詢操作
-
客戶端從遠端伺服器FTP退出,結束傳輸
-
-
FTP檔案的表示
-
分三段表示FTP伺服器上的檔案
-
HOST:主機地址,類似於ftp.mozilla.org,以FTP開頭
-
DIR:目錄表示檔案所在本地的路徑
-
File:檔名稱
-
如果想要完整精確表示ftp上某一個檔案,需要上述三部分組合在一起。-案例V06
-
#對應的包的匯入 import ftplib import os import socket #三步表示精確的ftp伺服器上的某一個檔案 HOST = 'ftp.acc.umu.se' DIR = 'Public/EFLIB/' FILE = 'README' #遠端連結FTP伺服器 try: f = ftplib.FTP() f.set_debuglevel(2) f,connect(HOST) except Exception as e: print(e) exit() print("******Connect to hsot {0}".formate(HOST)) #登陸伺服器 try: f.login() except Expetion as e: print(e) exit() print("login in sa 'anonymouse'") #登陸成功後更改當前目錄 try: f.cwd(DIR) except Exception as e: print(e) exit() print("***change dir to {0}".formate(DIR)) #切換目錄之後下載對應得檔案 try: #從FTP上下載檔案 #第一個引數是FTP命令 #第二個引數是回撥函式 #這個函式得指,執行RETR命令,下載檔案到本地後,執行得回撥函式 f.retrbinary('RETR {0}'.formate(FILE),open(FILE,"wb").write) except Exception as e: print(e) exit() #連結退出 f.quit()
-