網路程式設計 socket 套位元組

2022-08-20 20:06:11 字數 1921 閱讀 8474

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位的處理器,由於...