服务器代码:

#-*- coding:utf-8 -*-
#edited by python3.6
#
import socket,os '''
创建socket对象
'''
server = socket.socket() '''
绑定ip和端口
'''
server.bind(('localhost',23233)) '''
监听端口
'''
server.listen() while True:
conn,addr = server.accept()
print('======welcome to use leo\'s ssh========')
print('new connection:',addr)
while True:
print('等待新指令-->\r')
data = conn.recv(1024)
if not data:
print('客户端已断开!')
break
print('执行命令:',data)
cmd_result = os.popen(data.decode()).read() #接收来自客户端的数据
print('发送前的数据大小(byte):',len(cmd_result))
if len(cmd_result) == 0:
cmd_result = 'cmd has not output...'
conn.send(str(len(cmd_result.encode())).encode('utf-8'))
conn.send(cmd_result.encode('utf-8'))
print('发送完成。')
print('=========end==============\r')
'''
关闭程序
'''
server.close()

注:上述代码可能会造成粘包问题(即缓冲区将2行代码合并成一行执行),解决方式如下:

服务器:
conn.send(str(len(cmd_result.encode())).encode('utf-8'))
client_ack = conn.recv(1024)
conn.send(cmd_result.encode('utf-8'))
客户端:
print('命令执行结果大小为(byte):',cmd_result_size)
client.send('可以开始发送数据了!'.encode('utf-8'))
recv_size = 0
recv_data = b''

客户端代码:

#-*- coding:utf-8 -*-
#edited by python3.6
#
import socket '''
创建socket对象
'''
client = socket.socket() '''
连接到服务器
'''
client.connect(('localhost',23233)) while True:
cmd = input('[client]$ ').strip()
if len(cmd) == 0:continue
client.send(cmd.encode('utf-8'))
cmd_result_size = client.recv(1024)
print('命令执行结果大小为(byte):',cmd_result_size)
recv_size = 0
recv_data = b'' while recv_size < int(cmd_result_size.decode()):
data = client.recv(1024)
recv_size += len(data)
recv_data += data
else:
print('cmd result receive done...',recv_size)
print(recv_data.decode()) '''
关闭程序
'''
client.close()

socket编程之实现简单的ssh的更多相关文章

  1. 使用socket编程实现一个简单的文件服务器

    使用socket编程实现一个简单的文件服务器.客户端程序实现put功能(将一个文件从本地传到文件服务器)和get功能(从文件服务器取一远程文件存为本地文件).客户端和文件服务器不在同一台机器上. pu ...

  2. Win Socket编程原理及简单实例

    [转]http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html 使用Linux Socket做了小型的分布式,如Linux ...

  3. Linux C Socket编程原理及简单实例

    部分转自:http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx 1.   什么是TCP/IP.UDP? 2.   Socket在哪里 ...

  4. C#版 Socket编程(最简单的Socket通信功能)

    示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异 ...

  5. java基础之Socket编程概述以及简单案例

    概述: 用来实现网络互连的 不同的计算机上 运行的程序间 可以进行数据交互  也就是用来在不同的电脑间, 进行数据传输. 三大要素: IP地址: 设备(电脑,手机,ipad)在网络中的唯一标识. 组成 ...

  6. python socket编程实现的简单tcp迭代server

    与c/c++ socket编程对照见http://blog.csdn.net/aspnet_lyc/article/details/38946915 server: import socket POR ...

  7. socket 编程 TCP 实现简单聊天功能【转】

    转自:http://blog.csdn.net/liujia2100/article/details/9006479 版权声明:本文为博主原创文章,未经博主允许不得转载. 各个主要函数的功能: .so ...

  8. socket编程模拟linux下的ssh代码实现

    实现思路: 1.提供输入指令的客户端: 2.提供返回执行指令结果的服务端 3.寻找服务端返回结果一次无法全部接收的解决思路 服务端代码(ssh_server.py) #coding=utf-8 imp ...

  9. Python 基础之socket编程(二)

    Python 基础之socket编程(二) 昨天只是对socket编程做了简单的介绍,只是把socket通信的框架搭建起来,要对其中的功能进行进一步的扩充,就来看看今天的料哈! 一.基于tcp的套接字 ...

随机推荐

  1. CodeForces - 283E Cow Tennis Tournament

    Discription Farmer John is hosting a tennis tournament with his n cows. Each cow has a skill level s ...

  2. 【分块】bzoj2120 数颜色

    分块,在每个点记录一下它之前离它最近的相同颜色的位置pre[i],显然问题转化成了求[l,r]中pre[i]<l的值的个数. 这是分块擅长的,在每个块内记录有序表,查询时对零散的暴力,整块的二分 ...

  3. iOS开发——使用基于Autolayout的ScrollView

    问题描述: 在使用Autolayout布局方式对ScrollView进行布局时,如果你想做一个可以垂直方向滚动的九宫格类似这样:   拿一行来说,一定不要想当然的尝试去给一行图标进行均匀排列的操作(指 ...

  4. 【spring data jpa】jpa中使用count计数方法

    spring data jpa中使用count计数方法很简单 直接在dao层写方法即可 int countByUidAndTenementId(String parentUid, String ten ...

  5. 一些常用JS 函数总结

    搜索url参数 /** * 搜索url参数 * @param {String} name 参数键名 * @return {String} 对应值 */ function getQueryVariabl ...

  6. 前端h5开发发布ios

    1.首先要有一个html5+的软件HBuilder 2.整体完成然后就点发布,主要注意页面入口就是你的网页的入口 3.下载一个appuploader软件,无需mac本就可以方便的申请证书和描述(因为发 ...

  7. css3动画和JS+DOM动画和JS+canvas动画比较

    css3兼容:IE10+.FF.oprea(animation):safari.chrome(-webkit-animation) js+dom:没有兼容问题: js+canvas:IE9+:(性能最 ...

  8. 50行代码实现缓存,JAVA内存模型原理

    遇见这样的高人怎么办??下面是一个简单缓存的实现,相当牛叉!自己看吧,只有50行代码. 摘自:http://www.oschina.net/code/snippet_55577_3887 import ...

  9. springMVC中Restful支持

    RESTFul支持 http://localhost:8090/user/doAdd.action?username=tony&age=8 http://localhost:8090/user ...

  10. Linux下免安装mysql

    我是使用免安装的包mysql-5.6.30-linux2.6-x86_64.tar.gz(在http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6 ...