一:網路知識複習
1.cs架構和bs架構:
1.1什麼cs架構和bs架構是?
cs即client/server(客戶機/伺服器)結構,c/s結構在技術上很成熟,它的主要特點是互動性強、具有安全的訪問模式、網路通訊量低、響應速度快、利於處理大量資料。但是該結構的程式是針對性開發,變更不夠靈活,維護和管理的難度較大。通常只侷限於小型區域網,不利於擴充套件。並且,由於該結構的每台客戶機都需要安裝相應的客戶端程式,分布功能弱且相容性差,不能實現快速部署安裝和配置,因此缺少通用性,具有較大的侷限性。要求具有一定專業水準的技術人員去完成。
bs即browser/server(瀏覽器/伺服器)結構,就是只安裝維護乙個伺服器(server),而客戶端採用瀏覽器(browse)執行軟體。b/s結構應用程式相對於傳統的c/s結構應用程式是乙個非常大的進步。 b/s結構的主要特點是分布性強、維護方便、開發簡單且共享性強、總體擁有成本低。但資料安全性問題、對伺服器要求過高、資料傳輸速度慢、軟體的個性化特點明顯降低,這些缺點是有目共睹的,難以實現傳統模式下的特殊功能要求。例如通過瀏覽器進行大量的資料輸入或進行報表的應答、專用性列印輸出都比較困難和不便。此外,實現複雜的應用構造有較大的困難。
1.2他們的比較
2.公網和私網:
公網、私網是兩種internet的接入方式。
公網接入方式:上網的計算機得到的ip位址是internet上的非保留位址,公網的計算機和internet上的其他計算機可隨意互相訪問。
內網:也就是常說的區域網。是指在某一區域內由多台計算機互聯成的計算機組。一般是方圓幾千公尺以內。區域網可以實現檔案管理、應用軟體共享、印表機共享、工作組內的日程安排、電子郵件和傳真通訊服務等功能。區域網是封閉型的,可以由辦公室內的兩台計算機組成,也可以由乙個公司內的上千臺計算機組成。
3.arp協議
位址解析協議,即arp(address resolution protocol),是根據ip位址獲取實體地址的乙個tcp/ip協議。主機傳送資訊時將包含目標ip位址的arp請求廣播到網路上的所有主機,並接收返回訊息,以此確定目標的實體地址;arp命令可用於查詢本機arp快取中ip位址和mac位址的對應關係、新增或刪除靜態對應關係等
arp協議可以解析成它對應的那個mac位址
arp協議計算 ip和子網是否在區域網,在的話ip要mac位址 目標主機mac 目標主機ip
arp協議計算 ip不在乙個子網,閘道器mac(資料往外發),目標主機mac
往外傳送時候,原ip向閘道器傳送,閘道器向原ip要mac,後再向外部傳送
127.0.0.1,通常被稱為本地回環位址(loopback address),不屬於任何乙個有類別位址類。它代表裝置的本地虛擬介面,所以預設被看作是永遠不會宕掉的介面。在windows作業系統中也有相似的定義,所以通常在安裝網絡卡前就可以ping通這個本地回環位址。一般都會用來檢查本地網路協議、基本資料介面等是否正常的。
子網劃分
5.字串前面+b是專程bash型別等同於(『hello』.emcod('utf-8)
二:編寫基於tcp協議的套接字程式
socket是對應用層以下的層進行封裝
1.套接字工作流程
2.tcp如何使用
服務端:import
socket
import
subprocess
#1買手機
phone=socket.socket(socket.af_inet,socket.sock_stream) #
流式協議
#phone.setsockopt(socket.sol_socket,socket.so_reuseaddr)
#2繫結銀行卡
phone.bind(('
127.0.0.1
',8082)) #
元組內放自己的ip位址
#再次啟動服務端,告訴埠已經占用,解決辦法有:1.換個埠,8080換掉同時客戶端也需要換掉 2.在繫結之前加上下面內容:phone.setsockopt(socket.sol_socket,socket.so_reuseaddr)
#防止位置在 #2繫結銀行卡 上面
#3開機
phone.listen(5) #
半連線池,5以內接受訪問請求。 5是訪問數量,也就是說除了正在訪問的這個,最多再有5個
#4建立鏈結的請求
while true: #
需要乙個迴圈不停地與客戶端互動
connect,client_addr=phone.accept()
(client_addr)
#5 收/發訊息
while
true:
try: #
避免客戶端突然中斷,不會造成服務端崩潰,針對windows
date=connect.recv(1024) #
最大的接受位元組數
if len(date)==0: #
針對linux系統的
break
cmd=date.decode('
utf-8')
obj=subprocess.popen(cmd,shell=true,
stdout=subprocess.pipe,
stderr=subprocess.pipe)
res1=obj.stdout.read()
res2=obj.stderr.read()
connect.send(res1+res2)
#print(date.decode('utf-8'))
#connect.send(date.upper())
except
exception:
break
#6掛**
connect.close()
#7關機
phone.close()
客戶端import
socket
#1買手機
phone=socket.socket(socket.af_inet,socket.sock_stream) #
流式協議
#2打**
phone.connect(('
127.0.0.1
',8082))
#3發/收資料
while
true:
msg=input('
<<<<
').strip()
if len(msg)==0: #
避免客戶端輸入是空的時候出現異常,下面的無法操作
continue
phone.send(msg.encode(
'utf-8'))
date=phone.recv(1024)
print(date.decode('
utf-8'))
#4關閉
('127.0.0.1', 53338) 分別為客戶端ip和介面
基於tcp協議的套接字
簡單版本 一 服務端 import socket 1 買手機 拿到套接字物件,用來鏈結建立鏈結 phone socket.socket socket.af inet,socket.sock stream tcp稱為流式協議sock stream,udp稱為資料報協議sock dgram print ...
基於TCP協議的套接字程式設計
socket是應用層與tcp ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。socket模板已經為我們封裝好了,我...
基於TCP協議的套接字程式設計
基於socket通訊的內部演算法,當傳送的訊息為空的時候,接收端不會收到訊息,而傳送端向下執行到recv,兩端出於僵持狀態。所以在傳送端需要有個判斷,如果傳送的為空,則重新輸入傳送內容。socket是應用層與tcp ip協議通訊的中間軟體抽象層,它是一組介面。import socket 買手機 ph...