需要用到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协议实现远程连接的更多相关文章

  1. 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现

    一.客户端/服务器架构(C/S架构)                                                即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...

  2. (1)线程的同步机制 (2)网络编程的常识 (3)基于tcp协议的编程模型

    1.线程的同步机制(重点)1.1 基本概念 当多个线程同时访问同一种共享资源时可能会造成数据的覆盖和不一致等问题,此时就需要对线程之间进行协调和通信,该方式就叫线程的同步机制. 如: 2003年左右 ...

  3. (1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型

    1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将 ...

  4. 【TCP/IP网络编程】:04基于TCP的服务器端/客户端

    摘要:结合前面所讲述的知识,本篇文章主要介绍了简单服务器端和客户端实现的框架流程及相关函数接口. 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字(本 ...

  5. 网络编程(四)--基于udp协议的套接字、socketserver模块

    一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. 以太网头 ip头                  ...

  6. 网络编程(四)——基于udp协议的套接字socket、socketserver模块的使用

    基于udp协议的套接字.socketserver模块 一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. ...

  7. iOS:网络编程中三个数据解析协议HTTP、XML、JSON的详细介绍

    网络编程:HTTP协议.XML数据协议.JSON数据协议: HTTP: 1.HTTP传输数据有四种方式:Get方式.Post方式.同步请求方式.异步请求方式. 说明:同步和异步请求方式在创建链接对象和 ...

  8. unix网络编程第四章----基于TCP套接字编程

    为了执行网络I/O操作.进程必须做的第一件事情就是调用Socket函数.指定期待的通信协议 #include<sys/socket.h> int socket(int family,int ...

  9. ~~网络编程(三):TCP/UDP~~

    进击のpython ***** 网络编程--TCP/UDP协议 其实你也发现了,应用层是交给应用来处理的,我们什么也做不了 相较于网络编程来说,我们更重要的是在做应用层和传输层的对接 因为你也看到了, ...

随机推荐

  1. SQL SERVER可重复执行建表、建字段语句

    /*问题:type in (N'U') 中的N和U是什么意思? 答案:N是指Unicode编码,防止乱码:U是指用户表*/IF NOT EXISTS (SELECT * FROM sys.object ...

  2. HDU 1160 FatMouse's Speed ——(DP)

    又是那个lis变形的题目. 但是不好定义严格的比较符号,因此只能n^2去做.值得注意的一个是要先排序,因为可能可以先选后面的再选前面的,先排序的话就能够避免这个问题.但是要注意,因为要输出路径,所以要 ...

  3. Ryu控制器编程开发——packet_in和packet_out简易交换机实现

    Ryu控制器二次开发,实现一个简单的只能够简单地广播数据包的交换机. from ryu.base import app_manager from ryu.controller import ofp_e ...

  4. Python语法 - yield表达式(类似 m = yield i )

      yield是个表达式而不仅仅是个语句,所以可以使用x = yield r 这样的语法, yield表达式可以接收send()发出的参数,yield表达式是跟send方法一起配合使用   send方 ...

  5. 通过Nginx部署flask项目

    用Flask开发之后,很多人,喜欢用nohup python manage.py & 这样的形式,放到后台运行,其实这样只是个发开模式,很简陋,无法支持并发,进程监控等功能.所以采用nginx ...

  6. Maven的概述和基础(学习整理)

    1. Maven是啥 Maven是一个项目管理工具,包含了一个项目对象模型(POM),一组标准集合,一个项目生命周期(Lifecycle),一个依赖管理系统,和用来运行定义在生命周期阶段中的插件目标的 ...

  7. IOS项目集成ShareSDK实现第三方登录、分享、关注等功能

    (1)官方下载ShareSDK iOS 2.8.8,地址:http://sharesdk.cn/ (2)根据实际情况,引入相关的库,参考官方文档. (3)在项目的AppDelegate中一般情况下有三 ...

  8. [go]gin框架

    gin参考 Gin框架返回值 // 返回json func main() { r := gin.Default() //方法一: 自己拼接json // gin.H is a shortcut for ...

  9. C之枚举

    #include<stdio.h>#include<stdlib.h>enum WeekDay{ Monday,Tuesday,Wednesday,Thursday,Frida ...

  10. Eclipse的断点调试

    A:Debug的作用 调试程序 查看程序执行流程 B:如何查看程序执行流程 什么是断点: 就是一个标记,从哪里开始. 如何设置断点: 你想看哪里的程序,你就在那个有效程序的左边双击即可. 在哪里设置断 ...