# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017/8/22 16:14
# @Author : Mr_zhang
# @Site :
# @File : server.py
# @Software: PyCharm from socket import *
import subprocess
import struct
phone = socket(AF_INET,SOCK_STREAM)
phone.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
phone.bind(('127.0.0.1',8080))
phone.listen(7) print('startting...')
while True:
conn,client_addr = phone.accept() #等待客户端发送数据 ======>接收
print('------->',conn,client_addr)
while True:
try:
cmd = conn.recv(1024)
if not cmd:break
res = subprocess.Popen(cmd.decode('utf-8'),shell=True, #将普通字符串转化为系统命令
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout = res.stdout.read() #输入正确读取的内容
stderr = res.stderr.read() #输入错误读取的内容 header = struct.pack('i',len(stdout)+len(stderr)) #根据长度制作报头
conn.send(header) #发送报头去探路
conn.send(stdout)
conn.send(stderr)
except Exception:
break
conn.close()
phone.close()

 


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017/8/22 16:14
# @Author : Mr_zhang
# @Site :
# @File : client.py
# @Software: PyCharm from socket import *
import struct
phone = socket(AF_INET,SOCK_STREAM)
phone.connect(('127.0.0.1',8080)) while True:
cmd = input('>>:').strip() #输入的命令
if not cmd:continue
phone.send(cmd.encode('utf-8')) #encode之后发送出去 header_struct = phone.recv(4) #接收的报头信息
unpack_res = struct.unpack('i',header_struct) #将字节流转化为Python数据类型
total_size = unpack_res[0] #拆包之后是元组,取第一项 recv_size = 0 #接收道德数据,刚开始为0
total_data = b'' #初始数据
while recv_size < total_size: #接收到的数据<总共的数据
recv_data = phone.recv(1024) #每次接收的数据
recv_size+=len(recv_data) #接收到的数据=每次接收的收据+上次接收的数据
total_data+=recv_data #最后的总数据
print(total_data.decode('gbk')) #转换为本机电脑的编码
phone.close()

  

socket__服务端、客户端(注释版)的更多相关文章

  1. 基于JAX-WS的Web Service服务端/客户端 ;JAX-WS + Spring 开发webservice

    一.基于JAX-WS的Web Service服务端/客户端 下面描述的是在main函数中使用JAX-WS的Web Service的方法,不是在web工程里访问,在web工程里访问,参加第二节. JAX ...

  2. react服务端/客户端,同构代码心得

    FKP-REST是一套全栈javascript框架   react服务端/客户端,同构代码心得 作者:webkixi react服务端/客户端,同构代码心得 服务端,客户端同构一套代码,大前端的梦想, ...

  3. JAVA WEBSERVICE服务端&客户端的配置及调用(基于JDK)

    前言:我之前是从事C#开发的,因公司项目目前转战JAVA&ANDROID开发,由于对JAVA的各种不了解,遇到的也是重重困难.目前在做WEBSERVICE提供数据支持,看了网上相关大片的资料也 ...

  4. NTP时间同步 服务端 客户端 自动化安装配置

    NTP时间同步 服务端 客户端 自动化安装配置 原创内容 http://www.cnblogs.com/elvi/p/7657994.html #!/bin/sh #运行环境 centos6.cent ...

  5. chrony时间同步 服务端 客户端 安装配置

    chrony时间同步 服务端 客户端 安装配置 原创内容http://www.cnblogs.com/elvi/p/7658021.html #!/bin/sh #运行环境 centos7 #chro ...

  6. eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二)

    eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二) 接上篇博客,本篇博客主要包含两个内容: 4.使用Android studio创建webservice客 ...

  7. eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一)

    eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一) 本篇博客主要包含五个内容: 1.CXF换将搭建以及eclipse配置CXF. 2.eclipse创建w ...

  8. TCP/IP网络编程之基于UDP的服务端/客户端

    理解UDP 在之前学习TCP的过程中,我们还了解了TCP/IP协议栈.在四层TCP/IP模型中,传输层分为TCP和UDP这两种.数据交换过程可以分为通过TCP套接字完成的TCP方式和通过UDP套接字完 ...

  9. TCP/IP网络编程之基于TCP的服务端/客户端(二)

    回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...

  10. TCP/IP网络编程之基于TCP的服务端/客户端(一)

    理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于流(stream)的套接字.TCP是Transmissi ...

随机推荐

  1. 201521123071 《JAVA程序设计》第七周学习总结

    第7周-集合 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 1.1 Iterator<E> iterator(); //iterator()返回一个实现了It ...

  2. 201521123052《Java程序设计》第7周学习总结

    1. 本周学习总结 参考资料: XMind 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 public boolean contains(Ob ...

  3. 201521123088《JAVA程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出 ...

  4. 201521123064 《Java程序设计》第3周学习总结

    1. 本章学习总结 2. 书面作业 Q1:代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  5. 【Socket编程】通过Socket实现UDP编程

    通过Socket实现UDP编程 UDP通信: 1.UDP协议(用户数据报协议)是无连接.不可靠.无序的. 2.UDP协议以数据报作为数据传输的载体. 3.使用UDP进行数据传输时,首先需要将要传输的数 ...

  6. Spring配置属性文件

    在项目开发阶段和交付阶段数据库的连接信息往往是不同的,可以把这些信息写成属性文件,再在Spring中导入即可引用 jdbc.properties属性文件如下: jdbc.driverClassName ...

  7. mysql truncate、delete与drop区别

    相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. 不同点: 1. t ...

  8. C# 下搭建最新版OpenCV(Emgu CV)开发环境

    既然是"最新版" 首先当然是去sf找安装包: https://sourceforge.net/projects/emgucv/files/emgucv/ 或着去github主页上c ...

  9. maven使用私服以后,Missing artifact xxx:xxx:jar:xx的问题

    这里提供的是一种针对特殊情况的的解决方案. 即在你可以顺利使用本地仓库时,在settings.xml中加上私服配置以后出现这样的问题. 解决方案: windows→preferences→Maven→ ...

  10. [转]IOS开发中的CGFloat、CGPoint、CGSize和CGRect

    http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference ...