摘要:正確示例不斷完善中請(qǐng)輸入通信內(nèi)容來(lái)自服務(wù)器的消息循環(huán)連接接入服務(wù)器來(lái)自客戶(hù)端的消息先發(fā)送報(bào)頭長(zhǎng)度發(fā)送報(bào)頭客戶(hù)端中止鏈接
需求:
編寫(xiě)C/S架構(gòu)的程序,實(shí)現(xiàn)遠(yuǎn)程執(zhí)行命令,思路如下
1、客戶(hù)端接收用戶(hù)輸入的命令,然后發(fā)送給服務(wù)端,
2、服務(wù)端根據(jù)傳來(lái)的數(shù)據(jù)調(diào)用subprocess模塊執(zhí)行系統(tǒng)命令,然后將結(jié)果返回給客戶(hù)端,在客戶(hù)端打印
錯(cuò)誤歸納,續(xù)更,(正確示例請(qǐng)挪步下翻至底):
1、在客戶(hù)端接受到服務(wù)端發(fā)送的報(bào)頭,遺漏讀取報(bào)頭長(zhǎng)度的錯(cuò)誤:
header_bytes = client.recv(header_size)
2、如下圖,strcut解包時(shí),得到結(jié)果為元組,應(yīng)當(dāng)使用索引取值。
header_size = struct.unpack("i",client.recv(4))[0]正確示例(不斷完善中)
client.py
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/04/20 14:51 # @Author : MJay_Lee # @File : client.py # @Contact : limengjiejj@hotmail.com import socket import struct import json client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.connect(("127.0.0.1",8080)) while True: cmd = input("請(qǐng)輸入通信內(nèi)容>>:").strip() client.send(cmd.encode("utf-8")) header_size = struct.unpack("i",client.recv(4))[0] header_bytes = client.recv(header_size) header_json = header_bytes.decode("utf-8") header_dic = json.loads(header_json) total_size = header_dic["header_len"] recv_size = 0 res = b"" while recv_size < total_size: recv_data = client.recv(1024) res += recv_data recv_size += len(recv_data) print(res.decode("gbk")) # print("來(lái)自服務(wù)器的消息:",msg.decode("gbk")) client.close()
server.py
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/04/20 14:51 # @Author : MJay_Lee # @File : Sever.py # @Contact : limengjiejj@hotmail.com import socket import subprocess import json import struct server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.bind(("127.0.0.1",8080)) server.listen(5) print("start...") # 循環(huán)連接 while True: conn,client_addr = server.accept() print(client_addr,"接入服務(wù)器") while True: try: msg = conn.recv(1024) print("來(lái)自客戶(hù)端的消息:", msg.decode("utf-8")) obj = subprocess.Popen(msg.decode("utf-8"), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) obj_stdout = obj.stdout.read() obj_stderr = obj.stderr.read() obj_len = len(obj_stdout) + len(obj_stderr) header_dic = { "header_len":obj_len } header_json = json.dumps(header_dic) header_bytes = header_json.encode("utf-8") # 先發(fā)送報(bào)頭長(zhǎng)度 header_size = len(header_bytes) conn.send(struct.pack("i",header_size)) # 發(fā)送報(bào)頭 conn.send(header_bytes) conn.send(obj_stdout) conn.send(obj_stderr) # conn.send(msg+b"_accept") except ConnectionResetError: print(client_addr,"客戶(hù)端中止鏈接") break conn.close() server.close()
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/41555.html
摘要:其中,廈門(mén)市大數(shù)據(jù)安全開(kāi)放平臺(tái)作為全國(guó)首個(gè)采用安全屋技術(shù)開(kāi)展政務(wù)大數(shù)據(jù)安全開(kāi)放應(yīng)用的平臺(tái),一經(jīng)上線就吸引了大家的關(guān)注,年廈門(mén)在全國(guó)率先實(shí)現(xiàn)政務(wù)數(shù)據(jù)互聯(lián)互通無(wú)障礙共享,為政務(wù)大數(shù)據(jù)開(kāi)放奠定堅(jiān)實(shí)的基礎(chǔ)。作為今年新晉的五大生產(chǎn)要素之一,數(shù)據(jù)的地位正在蹭蹭上漲,躋身新家族,自然要憑實(shí)力說(shuō)話,數(shù)據(jù)也肩負(fù)著目標(biāo)KPI:雖然只有短短三句,但推進(jìn)起來(lái)可不是那么容易,今天咱們就來(lái)談?wù)剶?shù)據(jù)開(kāi)放共享這件事。在種類(lèi)...
摘要:拷貝目錄的話,是拷貝目錄里頭的文件,不包括目錄本身原樣拷貝,不支持遠(yuǎn)程文件設(shè)置指令只能存在一個(gè),多個(gè)的話,執(zhí)行最后的那一個(gè)。設(shè)置鏡像的元屬性指定被其他鏡像作為基礎(chǔ)鏡像時(shí)運(yùn)行的操作指令指定確保服務(wù)出現(xiàn)任何問(wèn)題而意外結(jié)束時(shí),自動(dòng)重新啟動(dòng)。 pause docker pause可以暫時(shí)停止容器,以釋放一部分CPU出來(lái)給其他服務(wù)使用docker unpause可以解凍 docker stop ...
摘要:最近手頭上做了一個(gè)很大的后臺(tái)管理項(xiàng)目,前端對(duì)復(fù)雜數(shù)據(jù)的處理要求頗高,也確實(shí)讓自己發(fā)現(xiàn)了很多之前被忽視的細(xì)節(jié)。鳴人佐助卡卡西佐助佐助佐助但是很遺憾及更早版本也不支持。 ??最近手頭上做了一個(gè)很大的后臺(tái)管理項(xiàng)目,前端對(duì)復(fù)雜數(shù)據(jù)的處理要求頗高,也確實(shí)讓自己發(fā)現(xiàn)了很多之前被忽視的細(xì)節(jié)。在此特整理出來(lái),希望不熟悉的朋友們們以后可以繞開(kāi)我踩的這些坑。本文初衷在于幫助大家梳理一些數(shù)組操作上的重點(diǎn)和易...
摘要:與比較中與比較關(guān)鍵字用來(lái)在函數(shù)或其他局部作用域中使用全局變量。親自動(dòng)手試后,發(fā)現(xiàn)使用了只會(huì)讀閉包內(nèi)的變量,可以隔著多層上一哥們類(lèi)比看作為步驟 這篇文章是抄抄寫(xiě)寫(xiě)得來(lái)的,純粹是這個(gè)編輯器比筆記的好太多,才在這兒寫(xiě)。 函數(shù)參數(shù)傳遞 Python的函數(shù)參數(shù)傳遞 對(duì)于變量(與對(duì)象相對(duì)的概念),其實(shí),python函數(shù)參數(shù)傳遞可以理解為就是變量傳值操作,用C++的方式理解,就是對(duì)void*賦值。如...
摘要:文章目錄前言一丶野指針指針的運(yùn)算指針整數(shù)指針指針指針的關(guān)系運(yùn)算二字符指針三指針數(shù)組與數(shù)組指針指針數(shù)組數(shù)組指針?biāo)臄?shù)組名與數(shù)組名五數(shù)組參數(shù)指針參數(shù)一維數(shù)組傳參二維數(shù)組傳參一級(jí)指針傳參二級(jí)指針傳參六丶函數(shù)指針函數(shù)指針即指 ...
閱讀 2783·2023-04-25 19:13
閱讀 4178·2021-09-22 15:34
閱讀 3127·2019-08-30 14:23
閱讀 1526·2019-08-29 17:17
閱讀 1683·2019-08-29 16:05
閱讀 1601·2019-08-29 13:26
閱讀 1283·2019-08-29 13:19
閱讀 623·2019-08-29 13:16