zoukankan      html  css  js  c++  java
  • 利用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)
     
    因为菜,所以仍在努力。
  • 相关阅读:
    小说下载器【追书接口】
    C#调用大漠插件,发送QQ和微信消息
    C# 终本案件、综合执行人、裁判文书爬虫
    追书神器API
    一个CookieContainer的拓展类
    利用BlockingCollection实现生产者和消费者队列,实现写文本
    EF SQLite的Like语句,生成为CHARINDEX的解决办法
    ClientKey实现登录QQ空间,并设置背景音乐
    DataTable转换为Model实体对象
    开通博客第一天!
  • 原文地址:https://www.cnblogs.com/Pinging/p/7505572.html
Copyright © 2011-2022 走看看