客戶端
importsocket
import
struct
import
json
phone = socket.socket(socket.af_inet, socket.sock_stream) #
買手機phone.connect(('
127.0.0.1
', 8082)) #
繫結手機卡
#發,收訊息
while
true:
cmd = input('
>>:
').strip()
ifnot cmd:continue
phone.send(cmd.encode(
'utf-8'))
#先收報頭的長度
header_len = struct.unpack('
i', phone.recv(4))[0]
#再收報頭
header_bytes =phone.recv(header_len)
header_json = header_bytes.decode('
utf-8')
header_dic =json.loads(header_json)
total_size = header_dic['
total_size']
#最後收資料
recv_size = 0 #
10241=10240+1
total_data = b''
while recv_size recv_data = phone.recv(1024)
recv_size +=len(recv_data)
total_data +=recv_data
print(total_data.decode('
gbk'
))phone.close()
服務端
importsocket
import
subprocess
import
struct
import
json
phone = socket.socket(socket.af_inet,socket.sock_stream) #
買手機phone.setsockopt(socket.sol_socket,socket.so_reuseaddr,1) #
就是它,在bind前加
phone.bind(('
127.0.0.1
',8082)) #
繫結手機卡
phone.listen(5) #
開機print('
starting...')
while true: #
鏈結迴圈
conn,client_addr=phone.accept() #
等** (鏈結,客戶的的ip和埠組成的元組)
print('
-------->
',conn,client_addr)
#收,發訊息
while true:#
通訊迴圈
try:
cmd = conn.recv(1024)
ifnot cmd:break
#針對linux
#執行cmd命令,拿到cmd的結果,結果應該是bytes型別
#。。。。
res = subprocess.popen(cmd.decode('
utf-8
'), shell=true,
stdout=subprocess.pipe,
stderr=subprocess.pipe)
stdout =res.stdout.read()
stderr =res.stderr.read()
#製作報頭
header_dic =
header_json =json.dumps(header_dic)
header_bytes = header_json.encode('
utf-8')
#傳送階段
#先發報頭長度
conn.send(struct.pack('i'
, len(header_bytes)))
#再發報頭
conn.send(header_bytes)
#最後傳送命令的結果
conn.send(stdout)
conn.send(stderr)
except
exception:
break
conn.close()
#掛**
phone.close() #
關機
基於udp協議的套接字及udp協議粘包問題
udp協議的套接字 udp協議傳輸 服務端和客戶端沒有建立連線一說。import socket 總結一下基礎工作流程 服務端生成套接字並繫結ip port,進入資料傳輸迴圈,服務端接受客戶端傳送的資訊和位址,然後服務端對客戶端請求做出響應,傳送處理好的資料根據而客戶端位址。客戶端建立套接字,直接進入...
基於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模板已經為我們封裝好了,我...