网络编程[第三篇]基于tcp协议实现远程连接
需要用到subprogress模块来远程控制cmd控制台程序来得到控制台的输出信息
一.服务端 —— 控制输出信息
import socket
import subprocess
#socket实例化一个对象
tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#监听的服务端地址
port_ip = ('127.0.0.1',8000)
#开启监听
tcp_server.bind(port_ip)
#设置最大监听数量
tcp_server.listen(3) while True:
#连接一个请求
print('等待连接')
sock,addr = tcp_server.accept()
print('成功连接到',addr)
#多次接发消息
while True:
# 当一个客户端完成通信后客户端主动断开时会导致服务器抛出异常
try:
# 电话接通后接收信息 指定一次接收信息的数量
data = sock.recv(1000)
print('接收到客户端的命令',data)
#如果客户端发送的信息为空,使用此判断即可退出当前循环,不至于程序堵塞
if not data:break
#实现远程连接——连接到服务端的控制台命令台
#可以通过通道PIPE进行数据传输
proc = subprocess.Popen(
#需要传输的数据
data.decode('utf-8'),
shell=True,
#将标准输入放入通道
stdin = subprocess.PIPE,
# 将标准错误放入通道
stderr = subprocess.PIPE,
# 将标准输出放入通道
stdout= subprocess.PIPE,
)
#从通道处拿出内容
err = proc.stderr.read()
if err:
result_proc = err
else:
result_proc = proc.stdout.read()
#如果程序有标准输出,但是又为空,就会没有反馈信息给客户端,引起客户端阻塞
if not result_proc:
result_proc = '执行成功'.encode('gbk')
# 接收到标准__信息后,反馈给client端,以告诉他已成功接收
sock.send(result_proc)
except Exception as e:
print(e)
break
sock.close()
tcp_server.close()
二.客户端 —— 基本不变
import socket
#实例化一个socket对象
tcp_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#连接的服务端地址
port_ip = ('127.0.0.1',8000)
#连接到服务端
tcp_client.connect(port_ip) #通讯循环
while True:
msg = input('>>')
#对信息进行处理
if not msg:continue
if msg == 'quit':break
#接通电话后发信息
tcp_client.send(msg.encode('utf-8'))
print('成功发送信息:',msg)
#接收反馈信息
feedback = tcp_client.recv(1000)
print('成功接收到反馈信息',feedback.decode('gbk'))
#关闭连接
tcp_client.close()
网络编程[第三篇]基于tcp协议实现远程连接的更多相关文章
- 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现
一.客户端/服务器架构(C/S架构) 即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...
- (1)线程的同步机制 (2)网络编程的常识 (3)基于tcp协议的编程模型
1.线程的同步机制(重点)1.1 基本概念 当多个线程同时访问同一种共享资源时可能会造成数据的覆盖和不一致等问题,此时就需要对线程之间进行协调和通信,该方式就叫线程的同步机制. 如: 2003年左右 ...
- (1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型
1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将 ...
- 【TCP/IP网络编程】:04基于TCP的服务器端/客户端
摘要:结合前面所讲述的知识,本篇文章主要介绍了简单服务器端和客户端实现的框架流程及相关函数接口. 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字(本 ...
- 网络编程(四)--基于udp协议的套接字、socketserver模块
一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. 以太网头 ip头 ...
- 网络编程(四)——基于udp协议的套接字socket、socketserver模块的使用
基于udp协议的套接字.socketserver模块 一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. ...
- iOS:网络编程中三个数据解析协议HTTP、XML、JSON的详细介绍
网络编程:HTTP协议.XML数据协议.JSON数据协议: HTTP: 1.HTTP传输数据有四种方式:Get方式.Post方式.同步请求方式.异步请求方式. 说明:同步和异步请求方式在创建链接对象和 ...
- unix网络编程第四章----基于TCP套接字编程
为了执行网络I/O操作.进程必须做的第一件事情就是调用Socket函数.指定期待的通信协议 #include<sys/socket.h> int socket(int family,int ...
- ~~网络编程(三):TCP/UDP~~
进击のpython ***** 网络编程--TCP/UDP协议 其实你也发现了,应用层是交给应用来处理的,我们什么也做不了 相较于网络编程来说,我们更重要的是在做应用层和传输层的对接 因为你也看到了, ...
随机推荐
- 《你不知道的JavaScript(上)》笔记——词法作用域
词法作用域是一套关于引擎如何寻找变量以及会在何处找到变量的规则. 词法作用域最重要的特征是它的定义过程发生在代码的书写阶段(假设你没有使用eval() 或 with) 欺骗词法:指修改词法作用域, 欺 ...
- Android控件RecyclerView的基本用法
Android控件RecyclerView的基本用法 转 https://www.jianshu.com/p/e71a4b73098f github: https://github.com/Cym ...
- ClipDrawable
Clip可以译为剪的意思,我们可以把ClipDrawable理解为从位图上剪下一个部分; Android中的进度条就是使用ClipDrawable来实现的,他根据设置level的值来决定剪切 区域的大 ...
- LevelDB深入浅出之整体架构
LevelDB是一个可持久化的KV数据库引擎,由Google传奇工程师Jeff Dean和Sanjay Ghemawat开发并开源.无论从设计还是代码上都可以用精致优雅来形容,非常值得细细品味.本文将 ...
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_09-修改页面-服务端-接口开发
需要写两个接口 api的接口内定义两个方法.修改的地方单独传了id @ApiOperation("根据页面id查询页面信息") public CmsPage findById(St ...
- [Scikit-learn] 1.5 Generalized Linear Models - SGD for Regression
梯度下降 一.亲手实现“梯度下降” 以下内容其实就是<手动实现简单的梯度下降>. 神经网络的实践笔记,主要包括: Logistic分类函数 反向传播相关内容 Link: http://pe ...
- HBase管理与监控——Dead Region Servers
[问题描述] 在持续批量写入HBase的情况下,出现了Dead Region Servers的情况.集群会把dead掉节点上的region自动分发到另外2个节点上,集群还能继续运行,只是少了1个节点. ...
- python中dict对象和字符串string对象互相转换
使用json包 import json dict1 = {"A":"a","B":"b"} # 转换为字符串 json. ...
- golang web框架设计6:上下文设计
context,翻译为上下文,为什么要设计这个结构?就是把http的请求和响应,以及参数结合在一起,便于集中处理信息,以后框架的扩展等.好多框架比如gin,都是有这个上下文结构. context结构为 ...
- Unity和Android交互学习
这段时间学习Unity和Android互调,从基础开始. 网上的教程有很多,浏览了一圈教程,发现目前有两种方式:一种是直接把 .aar文件导入Unity/Plugins/Android文件夹,另一种是 ...