python之路 socketserver模組

2021-08-27 03:22:34 字數 2097 閱讀 4176

通過socketserver模組實現套接字併發

基於tcp協議的套接字可以分為兩個階段:鏈結迴圈與通訊迴圈,與之對應的,socketserver模組中有兩個類,server類用於解決鏈結問題,request類用於解決通訊問題

server端

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方法,專門與剛建立好的連線進行通訊迴圈

client端

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 ...