利用python多線程實現多個客戶端與單個服務端的遠程ssh


本次實驗設計兩個方面的代碼,第一個是客戶端,代碼如下:

 

import os
from socket import *
c = socket(AF_INET,SOCK_STREAM)
c.connect(('127.0.0.1',6668))
while 1:
    cmd = raw_input('please put something :')
    if cmd=='exit':
        c.close()
        break
    c.send(cmd)
    data = c.recv(1024)
    print data

 

在本次代碼中,我們向服務端利用c.connect發送連接請求,端口為6668,之后為了方便多次輸入指令,我們使用while 1;然后每次輸入的值賦給cmd,之后將cmd的內容發送給接收方,之后收到接收方的回復后輸出。

第二個是服務端

而除了客戶端,這里最重要的部分就要數服務端了。

在多線程的編程環境下,服務端要實現監聽與創建新的線程。所以在這里我放上代碼:

#coding:utf-8
from socket import *
from os import *
from threading import Thread
def Threader(sock):
    cmd = sock.recv(1024)
    if cmd == 'exit':
        sock.close()
        exit()
    result = popen(cmd).read()
    sock.send(result)

s = socket(AF_INET,SOCK_STREAM)
s.bind(('',6668))
s.listen(1)
while True:
    sock,addr = s.accept()
    print 'Connect by ',addr
    t = Thread(target=Threader,args=(sock,))
    t.start()

在這里,我們調用了thread庫,然后將創建新的連接封裝成Threader函數,之后利用while,當有請求發送給服務端時,服務端調用Thread函數創建新的線程,然后該線程中創建新的通信函數,這樣也就實現了多線程通信,也就是說我可以創建多個客戶端與一個服務端,然后實現多個客戶端操作同一個服務端的可能。

 

不過后來我發現,我寫的服務端代碼有些小的漏洞,在我們進行命令發出的時候,我們不能夠多次給服務端發送命令。所以我在源代碼函數中添加了while 1;來實現多次命令的發出

def Threader(sock):
while 1:
cmd = sock.recv(1024)
if cmd == 'exit':
sock.close()
exit()
result = popen(cmd).read()
sock.send(result)
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM