windows下,python基於SocketServer類比實現SSH(多線程版)

來源:互聯網
上載者:User

標籤:

這兩天,學習了python的通訊端編程(linux版),我發現好多的資料都是linux的,然而python這個利器顯然是跨平台的,所以,我根據linux版的資料來寫一點windows的東西,希望對大家有點協助,另外:本人小菜菜一枚,要是哪裡有問題,歡迎指正,謝謝合作。

首先分析一下大概過程:

一、建立串連後,(多個或者一個)用戶端將命令列發給伺服器;

二、伺服器收到命令列後,執行命令;

三、伺服器將執行的結果反饋給用戶端;

四、多次執行上述過程;

那麼,python是怎麼解決這幾個問題的呢?

一、串連部分,由於伺服器端需要同時處理多個用戶端的請求,所以需要用到多線程的並行作業,python提供SocketServer來解決伺服器多線程問題,對於用戶端,用python提供的單線程socket就可以進行收發資料了;

二、執行發過來的命令,python提供了一個os這個模組來解決(linux使用commads模組),具體來說,由於我們需要將返回的資料發回用戶端,所以需要使用cmd_result = os.popen("命令").read()。

三、由第二點可知:顯然,我們需要返回用戶端的是cmd_result。

四、要多次執行,可以使用python的迴圈來執行;

註:大概過程以及python解決方案已經分析完了,但是,對於程式的細節,比如,使用sendall()可以一次發送所有資料,要是使用send()可能需要對資料的迴圈發送;再比如,對資料判空語句,以及python的文法,這裡筆者就不囉嗦了,要是有疑問,歡迎留言討論,或者自行百度解決,下面是代碼:

伺服器:

#serverimport SocketServer, osclass MyTCPHandler(SocketServer.BaseRequestHandler):    def handle(self):        while True:            self.data = self.request.recv(1024).strip()            print "{}wrote:".format(self.client_address[0])            if not self.data:                print "clilent %s is dead!" % self.client_address[0]                break            cmd_result = os.popen(self.data).read();            if len(cmd_result.strip()) != 0:                self.request.sendall(cmd_result)            else:                self.request.sendall('Not found the command:' + self.data)if __name__ == "__main__":    HOST, PORT = "127.0.0.1", 3333    server = SocketServer.ThreadingTCPServer((HOST, PORT), MyTCPHandler)    server.serve_forever()

用戶端:

#clientimport socketHOST = "127.0.0.1"PORT = 3333s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((HOST, PORT))while 1:    cmd = raw_input('Your command:').strip()    s.sendall(cmd)    result = s.recv(1024)    print results.close()


windows下,python基於SocketServer類比實現SSH(多線程版)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.