成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

tcp通信易錯(cuò)點(diǎn)羅列_續(xù)更

ThreeWords / 1810人閱讀

摘要:正確示例不斷完善中請(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ò)誤實(shí)例(續(xù)更)

錯(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

相關(guān)文章

  • 聊聊安全屋推進(jìn)政務(wù)數(shù)據(jù)開(kāi)放共享這件事

    摘要:其中,廈門(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)...

    Tecode 評(píng)論0 收藏0
  • docker命令易錯(cuò)點(diǎn)整理

    摘要:拷貝目錄的話,是拷貝目錄里頭的文件,不包括目錄本身原樣拷貝,不支持遠(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 ...

    YacaToy 評(píng)論0 收藏0
  • forEach、map、filter、find、sort、some等易錯(cuò)點(diǎn)整理

    摘要:最近手頭上做了一個(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)和易...

    AJie 評(píng)論0 收藏0
  • python 一些易錯(cuò)點(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*賦值。如...

    Lemon_95 評(píng)論0 收藏0
  • 指針?lè)矫嫦嚓P(guān)內(nèi)容,及其易錯(cuò)點(diǎn)

    摘要:文章目錄前言一丶野指針指針的運(yùn)算指針整數(shù)指針指針指針的關(guān)系運(yùn)算二字符指針三指針數(shù)組與數(shù)組指針指針數(shù)組數(shù)組指針?biāo)臄?shù)組名與數(shù)組名五數(shù)組參數(shù)指針參數(shù)一維數(shù)組傳參二維數(shù)組傳參一級(jí)指針傳參二級(jí)指針傳參六丶函數(shù)指針函數(shù)指針即指 ...

    linkFly 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<