#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017/8/23 15:33
# @Author : Mr_zhang
# @Site :
# @File : 服务端.py
# @Software: PyCharm from socket import *
import subprocess,struct,json
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() #等待链接,返回链接消息和客户端的IP和端口
print(conn,client_addr) #查看打印信息
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_dic = {'total_size':len(stdout)+len(stderr),'filename':None,'md5':None} #制作报头
header_json = json.dumps(header_dic) #序列化报头
header_bytes = header_json.encode('utf-8') #序列化转码
conn.send(struct.pack('i',len(header_bytes)))
conn.send(header_bytes)
conn.send(stdout)
conn.send(stderr)
except Exception:
break
conn.close()
phone.close()

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017/8/23 15:34
# @Author : Mr_zhang
# @Site :
# @File : 客户端.py
# @Software: PyCharm from socket import *
import struct,json
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')) #发送出去的消息需要转码
header_len = struct.unpack('i',phone.recv(4))[0] #接收到的消息解包 ([0]表示元组中的第一个值(报头)) header_bytes = phone.recv(header_len) #接收到的后续包
header_json = header_bytes.decode('utf-8') #基于上一行进行转码
header_dic = json.loads(header_json) #饭序列化
total_size = header_dic['total_size'] #反序列化之后得到的header_dic中的total_size大小
recv_size = 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. socket__服务端、客户端(注释版)

    # !/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/8/22 16:14 # @Author : Mr_zhang # @Sit ...

  2. asp.net获取服务端和客户端信息

    asp.net获取服务端和客户端信息 获取服务器名:Page.Server.ManchineName获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostNam ...

  3. python thrift 服务端与客户端使用

    一.简介 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, ...

  4. IE8下服务端获取客户端文件的路径为C:/fakePath问题的解决方案

    上一篇文章上提到,IE8下服务端获取客户端文件的路径时,会变成C:/fakePath问题,于是乎通过文件路径去获得文件大小就失败了. 上网搜了一下,主要原因是IE8因为安全考虑,在上传文件时屏蔽了真实 ...

  5. 如何排查APP服务端和客户端是否支持ATS

    服务端排查 取得客户端直接连接的服务端域名及端口,例如mob.com.cn,端口443,即HTTPS默认端口.针对公网可访问的生产环境地址,建议使用的在线监测工具.https://wosign.ssl ...

  6. (转)SVN 服务端、客户端安装及配置、导入导出项目

    SVN服务器搭建和使用(一) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上 ...

  7. linux(centos 6.4)下安装php memcache服务端及其客户端(详细教程)

    前言 在搭建个人博客时,由于没有使用任何框架,纯手工code前台和后台,导致遇到许多问题,其中一个问题就是mysql连接导致的页面相应速度异常低.在查询各种途径后,只能考虑使用memcache缓存.在 ...

  8. [C语言]一个很实用的服务端和客户端进行TCP通信的实例

    本文给出一个很实用的服务端和客户端进行TCP通信的小例子.具体实现上非常简单,只是平时编写类似程序,具体步骤经常忘记,还要总是查,暂且将其记下来,方便以后参考. (1)客户端程序,编写一个文件clie ...

  9. 使用Apache CXF开发WebServices服务端、客户端

    在前一篇的博客中,我使用Xfire1.x来开发了WebServies的服务端. 但是如果你访问Apache的官网,可以看到xfire已经被合并了. 最新的框架叫做CXF. Apache CXF = C ...

随机推荐

  1. Quartz入门指南

    Quartz入门指南 看到官网的教程对于新手来说不够全面和连贯,因此结合自己的使用过程写下这个入门指南,用以解惑.本文基于Quartz2.2.2版本.请注意,本文为了易于上手,省略了许多重要的概念,建 ...

  2. 201521123114 《Java程序设计》第6周学习总结

    1. 本章学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 Q1.clone方法 1.1 Object ...

  3. 201521123087《Java程序设计》第12周学习总结

    1. 本周学习总结 2. 书面作业 将Student对象(属性:int id, String name,int age,double grade)写入文件student.data.从文件读出显示. 1 ...

  4. Oracle与Mysql区别简述

    在Mysql中,一个用户下可以创建多个库: 而在Oracle中,Oracle服务器是由两部分组成 数据库实例[理解为对象,看不见的] 数据库[理解为类,看得见的] 一个数据库实例可拥有多个用户,一个用 ...

  5. java: Multiple encodings set for module chunk test "GBK" will be used by compiler

    IDEA 进行编译代码的时候,特别是新项目 特别容易出现 编码错误,但是 File-Encoding中设置的又没有问题,而且maven 是能打包的,就是用 idea 自带的 编译的时候 就会出现提示 ...

  6. 对Spring IOC的理解(转)

    Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.如何理 ...

  7. Springboot与Mybatis整合

    最近自己用springboot和mybatis做了整合,记录一下: 1.先导入用到的jar包 <dependency> <groupId>org.springframework ...

  8. Flask-WTF 创建表单P2

    表单安全 无需任何配置,FlaskForm将提供具有CSRF(Cross-site request forgery,也被称为one-click attack 或者session riding,通常缩写 ...

  9. servlet_2

    package com.atguigu.servlet; import java.io.IOException; import javax.servlet.Servlet;import javax.s ...

  10. Java学习笔记一---JVM、JRE、JDK

    jdk包含jre,jre包含jvm. 用java语言进行开发时,必须先装jdk: 只运行java程序,不进行开发时,可以只装jre. JVM 即Java Virtual machine,Java虚拟机 ...