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

转载于:https://www.cnblogs.com/Pinging/p/7505572.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值