網絡:
網絡協議:一套規則
網絡模型七層模型-七層 物理層 數據鏈路層 網絡層 傳輸層 會話層 表示層 應用層四層模型 鏈路層 網絡層 傳輸層 應用層
每一層都有相應的協議負責交換信息或者協同工作
TCP/IP協議 協議族
IP地址:負責網絡上唯一定位一個機器IP地址分5類3點4段式,每個字段是0~255127.0.0.1:本機IPV4 IPV6
端口號范圍:0-65535 知名端口:0——1023已經知名的端口 非知名端口:1024->
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(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()