python網路程式設計 socketserver模組

2021-09-25 19:17:03 字數 2399 閱讀 2569

#socketserver.baserequesthandler 類

def setup(self):#請求進來之前的操作

pass

def handle(self):#處理請求的操作

pass

def finish(self):#請求結束後的後事

pass

import socketserver

class mytcphandler(socketserver.baserequesthandler):

def handle(self):

#print(self.__dict__)#檢視繼承類中的屬性和方法

#print(self.server.__dict__)#檢視threadingtcpserver中的屬性和方法

while true:

try:

data = self.request.recv(1024)

#self.request.recv

print('收到命令:', data.decode())

cmd = data.decode()

# if not data:#socket中判斷客戶端是否斷開的方法

# print('客戶端已斷開')

# break

cmd_res = os.popen(cmd).read()

if len(cmd_res) == 0:

cmd_res = 'has not this command...'

# 先傳送結果長度給客戶端判斷

res_size = len(cmd_res.encode())

self.request.send(str(res_size).encode('utf-8'))

client_ack = self.request.recv(1024) # 為防止粘包發生,這裡給客戶端在接收到資料大小後,傳送乙個訊息給服務端確認

print(client_ack.decode())

self.request.send(cmd_res.encode('utf-8'))

except connectionreseterror as e:#在socketserver模組中,捕獲connectionreseterror判斷客戶端是否斷開

print('連線斷開:',e)

break

if __name__ == "__main__":

host, port = "localhost", 6512

# create the server, binding to localhost on port 9999

server = socketserver.threadingtcpserver((host, port), mytcphandler)#多執行緒

#server = socketserver.forkingtcpserver((host, port), mytcphandler)#多程序,windows無法使用,linux適用

# activate the server; this will keep running until you

# interrupt the program with ctrl-c

server.serve_forever()

import socket

client = socket.socket()

client.connect(('localhost',6512))

while true:

cmd = input('>>:')

if len(cmd) == 0 : continue

client.send(cmd.encode('utf-8'))

cmd_res_size = client.recv(1024)#接收結果長度

client.send('資料大小已收到,準備接收資料'.encode('utf-8'))#告訴伺服器可以傳送資料結果

recv_size = 0

cmd_res = b''

while recv_size < int(cmd_res_size.decode()):

data = client.recv(1024)

recv_size += len(data)

cmd_res += data

else:

print(cmd_res.decode())

print('res is end...')

client.close()

requesthandlerclass:

_baseserver__is_shut_down:

python 網路程式設計學習 套接字socket

以前也學過套接字程式設計,這次想系統全面的學習下python網路程式設計的使用。做這個,為檢測進度,也為後續留下筆記和足跡。socket 常用函式 socket.gethostname socket.gethostbyname import socket host socket.gethostnam...

Python網路程式設計學習筆記一 socket模組

coding utf 8 主要測試python網路程式設計中socket模組的使用 涉及到的技術點 套接字 面向連線的還有非面向連線套接字 tcp面向連線 udp非面向連線 1 匯入socket 2 建立socket socket三要素 1 socket family,2 socket type 3...

python網路程式設計 TCP網路程式設計

tcp程式設計 客戶端 import socket 1 套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2 建立鏈結 tcp socket.connect 172.27.35.1 8080 3 傳送資訊 tcp socke...