网络编程实现简单的ssh
客户端:客户端实例 ---> 建立连接 ----> 发送内容 ---> 接受内容。
import socket client = socket.socket()
client.connect(("localhost",9999)) while True:
cmd = input(">>>:").strip()
if len(cmd) == 0:continue
client.send(cmd.encode("utf-8"))
cmd_res = client.recv(500)
print(cmd_res.decode("utf-8",'ignore')) client.close()
服务端:客户端实例 --> 绑定ip + 端口 ---> 监听客户端连接 —> 接受客户端数据 --->发送数据至客户端。
#!usr/bin/env phthon3
# -*- coding:utf- -*-
# _Author_:"zhang Yaoqing" import socket,os server = socket.socket()
server.bind(('localhost',))
server.listen()
while True:
conn,addr = server.accept()
print('add..',addr)
while True:
data = conn.recv()
if not data:
print('客户端断开连接')
break
cmd_res = os.popen(data.decode()).read()
print('before send',len(cmd_res))
if len(cmd_res) == :
cmd_res = 'cmd has no output...'
conn.send(cmd_res.encode('utf-8'))
server.close()
但是这里面有一个问题就是大数据怎么上传下载呢。里面有一个缓冲区的问题,上面recv(500)这里我们最多是接受500
我接收的是500字节,但是服务端传过来的确是比这个大的多,客户端只接收了500字节,那服务端剩下的字节跑哪里去了?
答:①服务端第一次全部发送给客户端,客户端只接收自己部分的字节数,剩下的字节数被存储在 IO缓冲区 中,下一次你再用send的时候,你以为接收的是新的数据,其实不是,它会先把缓冲区里的数据发出去,然后你的新数据再放到缓冲区中,直到缓冲区满了再发出去
②客户端虽然写的接收的是500,但它不一定能收到500,就是服务器这次send的时候,没有send到500,你依然说你收500,代表着你最多一次只能收500,但是你给我send10个字节,我也得收,所以说它不是等着500全收满了,你发过来多少,我就收多少。
有两种情况缓冲区会给你发数据:
- 缓冲区满了肯定会发
- 缓冲区超时:就是手动send,肯定会给客户端发,这边也已经强制超时了,默认会等着缓冲区慢,手动send是为了不让对方等了,强制发送
网络编程实现简单的ssh的更多相关文章
- ContOS网络连接及简单的ssh Xshell连接!
这边简单的记录一下下ContOS网络连接及简单的ssh Xshell连接! 首先你得安装一个Contos Linux系统对吧! 1.找到设置--->网络-->有线连接-->IPv4 ...
- Python网络编程-Socket简单通信(及python实现远程文件发送)
学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅. 先介绍下TCP的三次握手: 1,简单的发送消息: 服务器端: i ...
- Java网络编程以及简单的聊天程序
网络编程技术是互联网技术中的主流编程技术之一,懂的一些基本的操作是非常必要的.这章主要讲解网络编程,UDP和Socket编程,以及使用Socket做一个简单的聊天软件. 全部代码下载:链接 1.网络编 ...
- Python学习笔记(二)网络编程的简单示例
Python中的网络编程比C语言中要简洁很多,毕竟封装了大量的细节. 所以这里不再介绍网络编程的基本知识.而且我认为,从Python学习网络编程不是一个明智的选择. 简单的TCP连接 服务器代码如 ...
- Windows平台VC++ 6.0 下的网络编程学习 - 简单的测试winsock.h头文件
最近学习数据结构和算法学得有点累了(貌似也没那么累...)...找了本网络编程翻了翻当做打一个小基础吧,打算一边继续学习数据结构一边也看看网络编程相关的... 简单的第一次尝试,就大致梳理一下看书+自 ...
- Linux&c 文件操作,线程进程控制,网络编程,简单知识点梳理
一:文件操作 在linux下,一切皆文件,目录是文件,称为目录文件,内容是该目录的目录项(但是目录只有内核可以编辑,超级用户也不可以编辑),设备也是设备文件,在/dev存放的就是一些设备文件,linu ...
- Linux&c 文件操作,线程进程控制,网络编程,简单知识点梳理
一:文件操作 在linux下,一切皆文件,目录是文件,称为目录文件,内容是该目录的目录项(但是目录只有内核可以编辑,超级用户也不可以编辑),设备也是设备文件,在/dev存放的就是一些设备文件,linu ...
- 网络编程 - 1.简单的套接字通信/2.加上通信循环/3.bug修复/4.加上链接循环/5.模拟ssh远程执行命令
1.简单的套接字通信 服务端 ''' 服务端 接电话 客户端 打电话 1.先启动服务端 2.服务端有两种套接字 1.phone 用来干接收链接的 2.conn 用来干收发消息的 ''' import ...
- Java UDP网络编程 - 最简单示例
UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍 服务端: package wyf; import java.i ...
随机推荐
- mysql访问慢解决
配置变更思路: 扩大MySQL连接数至2000,同时扩大操作系统最大文件描述符:扩大innodb缓存池 操作步骤: vi /etc/my.cnf max_connections = 2000innod ...
- linux 文件赋权限
chown tomcat:tomcat /logs chmod 766 /logs
- Intel GPA + 夜神模拟器
环境:Win10,Intel GPA 2019R2,Nox(夜神模拟器)6.2.8.3 记录下注意的事项 1. 夜神模拟器下载地址建议 : https://www.bignox.com/ 2. 先运行 ...
- [非原创]Office 2019 增强版 批处理激活 亲测成功
忘了原创网址了,在 https://www.52pojie.cn/ 上看到的,这里我备忘一下,希望知道原创网址的朋友告诉我一下,谢谢! 将下面批处理脚本存成.bat文件后,以管理员方式运行: @ech ...
- 记录一次SignalR服务端实现过程
前言:最近手上一个项目需要后端实时推送数据到前端,第一个想到的就是微软的SignalR,由于之前都是平时没事写的Demo,没有用到实际项目中,这次恰好用到了,因此记录下来整个实现过程(网上也有很多类似 ...
- 带你手写基于 Spring 的可插拔式 RPC 框架(二)整体结构
前言 上一篇文章中我们已经知道了什么是 RPC 框架和为什么要做一个 RPC 框架了,这一章我们来从宏观上分析,怎么来实现一个 RPC 框架,这个框架都有那些模块以及这些模块的作用. 总体设计 在我们 ...
- TP5.1框架中的模型关联
一对一关联 hasOne('关联模型','外键','主键'); 关联模型(必须):关联的模型名或者类名 外键:默认的外键规则是当前模型名(不含命名空间,下同)+_id ,例如user_id 主键:当前 ...
- 使用window.open 实现弹框和居中对齐
// 打开页面方法 window.open(url, '_blank', centerStyle('600', '400')+',toolbar=no,menubar=no,resizeable=no ...
- 第1章:Python语言与Linux系统管理
1.Python语言为什么流行 1).简单易学 2).丰富强大的库 3).开发效率高 2.Python语言有什么缺点 1).Python的执行速度不够快 2).Python的GIL锁限制并发:GIL是 ...
- 【搜索】n的约数
题目链接:传送门 [题解]: 考察dfs和质因数分解,首先开一个prime数组. 参数解释: 1.当前值的大小.[利用题目的n来控制范围] 2.控制下界,每次都是以某一个质数开始搜索, pos 3.控 ...