利用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)