通過socketserver模組實現套接字併發基於tcp協議的套接字可以分為兩個階段:鏈結迴圈與通訊迴圈,與之對應的,socketserver模組中有兩個類,server類用於解決鏈結問題,request類用於解決通訊問題
server端
client端import json
import struct
import subprocess
import socketserver
class mytcp(socketserver.baserequesthandler):
def handle(self): # 必須擁有handle方法
print('客戶端進入...', self.client_address)
while true:
try:
data = self.request.recv(1024)
if len(data) == 0: break
print('來自客戶端的資料》', data.decode('utf-8'))
obj = subprocess.popen(data.decode(), shell=true,
stdout=subprocess.pipe,
stderr=subprocess.pipe)
stdout = obj.stdout.read()
stderr = obj.stderr.read()
header =
header_json = json.dumps(header)
header_bytes = header_json.encode('utf-8')
header_len = struct.pack('i',len(header_bytes))
self.request.send(header_len)
self.request.send(header_bytes)
self.request.send(stdout)
self.request.send(stderr)
except connectionreseterror:
break
if __name__ == '__main__':
s = socketserver.threadingtcpserver(('127.0.0.1', 8081), mytcp)
s.serve_forever() # 建立連線
# 每建立乙個連線。就產生乙個執行緒,並例項化類產生物件,呼叫該物件下的handle方法,專門與剛建立好的連線進行通訊迴圈
import json
import socket
import struct
tag = true
client = socket.socket(socket.af_inet, socket.sock_stream)
client.connect(('127.0.0.1', 8081))
while tag:
to_data = input('(q退出)>>>').strip()
if to_data == 'q':
tag = false
continue
if len(to_data) == 0: continue
client.send(to_data.encode('utf-8'))
obj = client.recv(4)
deader_len = struct.unpack('i', obj)
deader_json = client.recv(deader_len[0])
deader = json.loads(deader_json)
data_len = deader['cmd_size']
data = client.recv(data_len)
print(data.decode('gbk'))
client.close()
Sockets 簡要介紹
從這裡開始介紹 socket api,我們由socket 位址開始介紹,基本上後續的所有例子,都要涉及到這個結構體,這個結構體可以有兩個傳輸方向,從使用者程序到核心,或者從核心到使用者程序socket address structures 絕大多數socket 函式都須要傳遞乙個指向socket的指...
基於TCP的Sockets程式設計
win32 下使用socket api函式進行網路開發的基本流程與方法 1 初始化和釋放套接字型檔 2 建立套接字控制代碼 3 繫結位址資訊 4 連線 5 資料收發 6 關閉套接字 下面介紹基於tcp的sockets程式設計 tcp伺服器 include include include pragma...
woo語言使用sockets模擬http請求
print sockets模擬http請求測試 正常情況下,請勿這樣使用,請使用正規的http模組,這裡僅僅探索sockets使用方法 在這個函式內,sockets有效,函式結束後,sockets自動關閉 out 撥通遠端ip ok 傳送http頭部資訊位元組長度 r,n r sock write ...