利用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 ...
随机推荐
- Java GUI学习心得
虽然GUI的应用已经不是特别广泛了,但是如果了解一点,可以做些自己想要的工具,最近做了一个工具(是什么就不提了),当然碰到很多的问题,都意义解决了,现在分享出来. 1.关于窗体面板的显示问题 可能会遇 ...
- [2014-02-19]如何移除响应头中的.net framework 版本信息 以及mvc版本信息?
先来看一个简单mvc3网站的响应头 修改Global.asax文件 在Application_Start方法中添加如下代码 MvcHandler.DisableMvcResponseHeader = ...
- Git安装配置(完整版)
首先安装Windows客户端的git和TortoiseGit. 安装这两个软件还是蛮重要的,很多选项不能乱选. 为了写个完整的博客,我是装了又卸,卸了又装. 1.安装git 下载:https://gi ...
- VS2015企业版和专业版永久密匙
专业版:HMGNV-WCYXV-X7G9W-YCX63-B98R2企业版:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV
- snowflake主键生成策略
1.snowflake简介 在分布式系统中,我们需要各种各样的ID,既然是ID那么必然是要保证全局唯一,除此之外,不同当业务还需要不同的特性,比如像并发巨大的业务要求ID生成效率高,吞吐大:比如某些银 ...
- ionic3 自动创建启动背景splash以及图标icon
在新建的项目文件夹下的 resources下就是我们放置图标以及启动背景图片的位置了. 如果现在我们想生成自己的图片的启动背景以及图片,我们需要把resources下的 icon.png 以及spla ...
- poj 3635 带花费的Dij+head优化
练习!! 这里主要需要注意的是进队的条件和dp[][]状态的控制,dp[i][j]表示到第i个城市剩余汽油为j的最小花费. 代码: #include<iostream> #include& ...
- HTML特殊符号、常用字符实体
HTML特殊符号对照表.常用的字符实体 最常用的字符实体 显示结果 描述 实体名称 实体编号 空格 <</td> 小于号 < < > 大于号 > ...
- 如何通过navigator.userAgent判断是哪款浏览器?
userAgent 用户代理.通过浏览器控制台alert( navigator.userAgent );可以获得当前浏览器的信息,如果逆推呢? 通过navigator.userAgent判断是哪款浏览 ...
- JS中的运算符和JS中的分支结构
JS中的运算符 1.算术运算(单目运算符) + .-.*. /. %取余.++自增 .--自减 +:两种作用,链接字符串/加法运算.当+两边全为数字时,进行加法运算:当+两边有任意一边为字符串时,起链 ...