• 利用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)
     
    因为菜,所以仍在努力。
  • 相关阅读:
    Hibernate入门
    安卓第四周作业
    第十三周作业
    第十三周上机作业
    第十二周作业
    第十二周上机作业
    第十一周作业
    第十一周上机作业
    第十周上机作业
    第九周上机作业
  • 原文地址:https://www.cnblogs.com/Pinging/p/7505572.html
Copyright © 2020-2023  润新知