client---------------------

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2018/6/6 14:53
# @File    : client1.py

import socket
import json

ip_port = ('127.0.0.1', 8080)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
res = s.connect_ex(ip_port)

while True:
    msg = input('>>: ').strip()
    if len(msg) == 0: continue
    if msg == 'quit': break

s.send(msg.encode('utf-8'))
    response_msg_header = s.recv(100).decode("utf-8")
    response_msg_header_data = json.loads(response_msg_header)
    msg_size = response_msg_header_data['length']
    res = s.recv(msg_size)
    print("received res size ", len(res))
    print(res.decode('gbk'), end='')

server-------------------------------------

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2018/6/6 14:53
# @File    : server1.py

import socket,json
import subprocess

ip_port = ('127.0.0.1', 8080)
t_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
t_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
t_server.bind(ip_port)
t_server.listen(5)

def pack_msg_head(header, size):
    bytes_head = bytes(json.dumps(header), encoding='utf-8')
    fill_up_size = size - len(bytes_head)
    print('need to fillup ', fill_up_size)
    header['fill'] = header['fill'].zfill(fill_up_size)
    print('new header ', header)
    bytes_new_header = bytes(json.dumps(header), encoding='utf-8')
    return bytes_new_header

while True:
    conn, addr = t_server.accept()
    print('客户端 ', addr)
    while True:
        cmd = conn.recv(1024)
        if len(cmd) == 0: break
        print('recv cmd ', cmd)
        res = subprocess.Popen(cmd.decode('utf-8'), shell=True,
                               stdout=subprocess.PIPE,
                               stderr=subprocess.PIPE,
                               stdin=subprocess.PIPE)
        stderr = res.stderr.read()
        stdout = res.stdout.read()
        print('res len ', len(stdout))

msg_header = {
            'length': len(stdout + stderr),
            'fill': ' '
        }
        packed_header = pack_msg_head(msg_header, 100)
        print('packed header size ', packed_header, len(packed_header))
        conn.send(packed_header)
        conn.send(stderr + stdout)

socket_简单报头的更多相关文章

  1. 网络编程——socket开发

    Socket套接字方法 socket 实例类(8-10分钟) socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) ...

  2. python报头解决粘包简单实现

    client------------- #!/usr/bin/env python # encoding: utf-8  # Date: 2018/6/5 import socketimport st ...

  3. socket上http协议应用(使用socket进行http通信的例子,准备好报头以后,简单read/write就可以了)

    前几天看socket本有点晕, 好不容易弄明白了,才发现公司服务器用的是http的. 找了好久也没发现linux下直接用http的api, 不过今日偶然发现了使用socket进行http通信的例子, ...

  4. IP报头

      位字段的值设置为二进制的0100表示IP版本4(IPv4).设置为0110表示IP版本6(IPv6)   位,它表示32位字长的IP报头长度,设计报头长度的原因是数据包可选字段大小会发生变化.IP ...

  5. squid介绍及其简单配置

    squid的简单介绍 squid的概念 squid是一种用来缓存Internet数据的软件.接受来自人们需要下载的目标(object)的请求并适当的处理这些请求.也就是说,如果一个人想下载一web界面 ...

  6. Http协议与TCP协议简单理解

    TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...

  7. HTTPS, SPDY和 HTTP/2性能的简单对比

    中文原文:HTTPS, SPDY和 HTTP/2性能的简单对比 整理自:A Simple Performance Comparison of HTTPS, SPDY and HTTP/2 请尊重版权, ...

  8. ASP.NET的SEO:HTTP报头状态码---内容重定向

    本系列目录 我们经常说"404错误",你知道他指的是什么意思么? 404其实是Http报头所包含的一个"状态码",表明该Http请求失败.那么除此之外,还有哪些 ...

  9. ajax原理总结附简单实例及其优点

    在工作中用了Ajax N多次了,也看过一些相关方面的书籍,也算是认识了它,但是一直没有认真总结和整理过相关的东东,失败! 近有闲情,将之总结如下: [名称] Ajax是Asynchronous Jav ...

随机推荐

  1. c++ 计算指定半径圆的面积

    #include <iostream> #define PI 3.14 using namespace std; class Circle { float radius; public: ...

  2. Java Spring-事务管理

    2017-11-12 16:31:59 Spring的事务管理分为两种: 编程式的事务管理:手动编写代码 声明式的事务管理:只需要配置就可以 一.最初的环境搭建 public interface Ac ...

  3. python学习笔记(自定义库文件路径)

    博主最近在弄接口自动化.主要是基于python自带的unittest框架.包括 Pubilc模块定义所有接口. Main模块根据业务需求重新封装接口便于测试. config文件导入测试业务的固定参数. ...

  4. log模块和report模块

    这两个模块不需要管,我们生成的log和report直接添加到这里就好

  5. 最短路径求解(Dijkstra)

    Dijkstra算法分析 题目分析参照<数据结构>(严蔚敏)7-6节 最短路径问题描述 参照日常生活中的公交查询系统.我们有选项: 少换乘/最少站数 价格最少/时间最短.... (ps:下 ...

  6. poj3436网络流之最大流拆点

    这题看了半天看不懂题意...还是看的网上题意写的 加一个源点一个汇点,把每个点拆成两个,这两个点的流量是v,其他联通的边都设为无穷大 输入没有1的点就与源点连接,输出只有1的点就与汇点连接 还有这个输 ...

  7. CORS请求

    一.简介 CORS(跨域资源共享 Cross-origin resource sharing)是实现跨域的一种常用方式.实现CORS通信的关键是服务器.只要服务器实现了CORS接口,就可以跨源通信 二 ...

  8. MMAP文件内存映射

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  9. Life Cycle(JSF+Facelets)

    一.JSF Life Cycle: 图1 图2 应用程序的生命周期是指应用程序的各个阶段,从开始到结束.所有应用程序的生命周期.在web应用程序生命周期中,执行常见任务,包括以下内容.■处理传入的请求 ...

  10. 作业要求20181023-4 Alpha阶段第2周/共2周 Scrum立会报告+燃尽图 01

    作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284] 版本控制:https://git.coding.net/liuyy08 ...