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