socket编程之实现简单的ssh
2017-07-10 15:34
330 查看
服务器代码:
#-*- 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通讯编程实现简单的任意聊天程序
- Android Socket 编程简单实现
- 01 TCP Socket 编程_一个简单的服务端程序和客户端程序实现
- APUE学习之----socket编程实现简单的C/S
- socket编程中客户端常用函数 以及简单实现
- socket编程实现一个简单的多人通信(udp)
- Android网络编程之Socket通信实现简单聊天室
- <C/C++> Socket编程Http下载的简单实现
- Socket 由浅入深系列--------- 简单实现编程(三)
- python socket编程实现的简单tcp迭代server
- Socket 由浅入深系列--------- 简单实现编程(三)
- Ubuntu下c语言实现并发服务器简单socket编程实例
- Android Socket 编程简单实现及 属性设置
- Socket编程Http下载的简单实现
- java基于TCP的socket编程简单实现[代码实践过]
- 传输层:SOCKET编程之“简单时间服务器实现”
- UCsocket 编程,简单聊天室实现
- 简单的IPv6 UDP/TCP socket编程 -- 两台Linux实现简单的ipv6通信
- Socket编程简单实现服务端客户端连接
- 使用socket编程实现一个简单的文件服务器