socket處於應用層與傳輸層之間,提供了一些簡單的介面,避免與作業系統之間的對接,省去了相當繁瑣複雜的操作.
socket在python中屬於乙個模組,通過呼叫模組中已經實現的方法建立兩個程序之間的連線和通訊。
伺服器端:
import socket
phone = socket.socket(socket.af_inet,socket.sock_stream)
phone.bind(('127.0.0.1',8848))
phone.listen()
print('開機')
while 1:
conn,addr = phone.accept()
while 1:
try:
from_client_data = conn.recv(1024).decode("utf-8")
if from_client_data.upper() == "q":
print('客戶端已正常斷開連線')
break
else:
print(f'來自客戶端的訊息:')
while 1:
to_client_data = input('>>>')
if not to_client_data:
print('內容不能為空!')
continue
else:
conn.send(to_client_data.encode('utf-8'))
break
except connectionreseterror:
print('客戶端異常斷開連線')
break
conn.close()
phone.close()
客戶端:
import socket
phone = socket.socket(socket.af_inet,socket.sock_stream)
phone.connect(('127.0.0.1',8848))
while 1:
try:
data = input('>>>')
if not data:
print('內容不能為空!')
continue
phone.send(data.encode('utf-8'))
if data.upper() == "q":
break
else:
from_server_data = phone.recv(1024).decode('utf-8')
print(f'來自伺服器的訊息:')
except connectionreseterror:
print('伺服器異常斷開連線')
break
phone.close()
例項: 遠端執行命令
呼叫subprocess模組
import subprocess
obj = subprocess.popen('dir1',
shell=true,
stdout=subprocess.pipe,
stderr=subprocess.pipe,
)print(obj.stdout.read().decode('gbk')) # 正確命令
print(obj.stderr.read().decode('gbk')) # 錯誤命令
為什麼會存在快取區:
暫時儲存一些資料
在網路波動時,保證資料的收發穩定,勻速
缺點: 造成了粘包現象之一
TCP套介面程式設計 Socket
tcp套介面程式設計 socket socket起源於unix,而unix linux基本哲學之一就是 一切皆檔案 都可以用 開啟open 讀寫write read 關閉close 模式來操作。我的理解就是socket就是該模式的乙個實現,socket即是一種特殊的檔案,一些socket函式就是對其...
socket程式設計 位元組序
接觸到socket程式設計,就一定會接觸位元組序轉換。對於字串來說,是沒有位元組序的差別的,就像我們寫字,記憶體就像是紙,字串就從左向右依次寫 記憶體資料 a b c d 而任何cpu讀取的時候,也都是從左向右依次讀取。對於多位元組資料 比如short int long.不同位元組序是有差別的。所有...
socket程式設計之網路位元組序與主機位元組序
0 為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組為 8bit。但是在c語言中除了8bit的char之外,還有16bit的short型,32bit的long型,另外,對於位數大於 8位的處理器,例如16位或者32位的處理器,由於...