利用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)
利用python多线程实现多个客户端与单个服务端的远程ssh的更多相关文章
- c++ 网络编程(二) linux 下多进程socket通信 多个客户端与单个服务端交互代码实现回声服务器
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9612820.html 锲子-- 预备知识优雅的关闭套接字连接: 基于TCP的半关闭 TCP中的 ...
- java版gRPC实战之六:客户端动态获取服务端地址
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Android客户端与PHP服务端交互(一)---框架概述
背景 作为一个普通上班族,总是想做一些自认为有意义的事情,于是乎准备成立一个工作室,尽管目前正在筹备阶段,但是之前有些朋友提出一些需求的时候,我发现自己的能力还是有限,直到最近和一些技术牛朋友聊起这事 ...
- C#使用Thrift简介,C#客户端和Java服务端相互交互
C#使用Thrift简介,C#客户端和Java服务端相互交互 本文主要介绍两部分内容: C#中使用Thrift简介 用Java创建一个服务端,用C#创建一个客户端通过thrift与其交互. 用纯C#实 ...
- 6-1 建立客户端与zk服务端的连接
6-1 建立客户端与zk服务端的连接 zookeeper原生java api使用 会话连接与恢复; 节点的增删改查; watch与acl的相关操作; 导入jar包;
- android客户端app和服务端交互token的作用
Android客户端和服务端如何使用Token和Session niceheart关注1人评论34644人阅读2014-09-16 16:38:44 对于初学者来说,对Token和Session的 ...
- Linux下更改oracle客户端字符集和服务端字符集
from:http://blog.csdn.net/chid/article/details/6166506 Linux 下更改 oracle 客户端字符集和服务端字符集 1.Linux 下更改 or ...
- 利用webuploader插件上传图片文件,完整前端示例demo,服务端使用SpringMVC接收
利用WebUploader插件上传图片文件完整前端示例demo,服务端使用SpringMVC接收 Webuploader简介 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...
- XFire客户端调用CXF服务端(四)
前面章节:http://www.cnblogs.com/xiehongwei/p/8082337.html 已经开发出了CXF服务端,现在用XFire开发客户端调用CXF服务端,代码如下: impor ...
随机推荐
- amoeba
Amoeba 原理:amoeba相当于业务员,处理client的读写请求,并将读写请求分开处理.amoeba和master以及slave都有联系,如果是读的请求,amoeba就从slave读取信息反馈 ...
- python进阶学习(三)
本节通过SQLite了解数据库操作 ------------------------- 数据库支持 使用简单的纯文本只能实现有退限的功能,所需要引入数据库,完成更强大的功能,本节使用的简单数据库SQL ...
- SoapUI中XML解析
From http://www.robert-nemet.com/2011/11/groovy-xml-parsing-in-soapui.html Introduction Since soapUI ...
- java TreeSet 应用
本文主要是介绍一下java集合中的比较重要的Set接口下的可实现类TreeSet TreeSet类,底层用二叉树的数据结构 * 集合中以有序的方式插入和抽取元素. * 添加到TreeSet中的元素必须 ...
- 搞java的都土鳖
spring不就几个破框架让人们下载使用吗,但是官网什么都有,就是没有下载链接.java程序员被那些垃圾框架强奸的体无完肤,还乐在其中,还什么SSH,哇哦!java好像跟企业干上了,什么企业bean, ...
- 几个常用EL表达式的用法
转载至 http://yqsshr.blog.51cto.com/469059/131824 1,用来获取表单数据 param 和 paramValues 1.jsp 的有如下表单 <for ...
- 《个人-GIT使用方法》
使用GIT版本控制工具及基本使用方法(安装,新建,推送,拉取),托管平台的使用方法. Git 常用命令 git init here -- 创建本地仓库(repository),将会在文件夹下创建一个 ...
- 解决:"不再sudoers文件中,此事将不做被报告”的问题
使用sudo出现问题:不再sudoers文件中,此事将不做被报告 系统:win8.1 +cents 7 问题:在虚拟机中,默认不是root账号,在使用sudo命令时候收到下面警告: sudo命令含义: ...
- 编辑sass报错:error style.scss (Line 3: Invalid GBK character "\xE5")解决办法
cmd.exe /D /C call C:/Ruby23-x64/bin/scss.bat --no-cache --update header.scss:header.css error heade ...
- String类的重要方法与字段
1.Length():获取当前字串长度 2.charAt(int index):获取当前字符串对象下标index处的字符 3.getChars():获取从指定位置起的子串复制到字符数组中 参数:int ...