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. hdu 2204 Eddy's爱好 容斥原理

    Eddy's爱好 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem ...

  2. php 数值数组

    <?php $cars=array("Volvo","BMW","Toyota"); echo ] . ] . ] . ". ...

  3. 使用 while 循环

    与 for 循环不同,while 循环会一直运行,直到给定条件不满足为止.例如,下面的 while 循环从 x=0 开始.每次循环都会检查 x<=10 是否成立.如果成立,就执行循环内部的表达式 ...

  4. ubuntu 10.04 安装arm交叉编译器

    家里有一台cotext-A9(armv7-a) 的盒子,现在不用了, 一直想着废物利用.于是想怎么为这盒子编译程序. 目标机器: root@routon-h1:/# uname -a Linux ro ...

  5. 利用JS将页面中包含“一个”字段值的元素改为红色

    document.body.innerHTML = document.body.innerHTML.replace(/一个/ig,"<span style='color: red;'& ...

  6. Django配置让其他电脑访问网站(包括:修改IP和端口)

    http://blog.sina.com.cn/s/blog_9c5364110101fyk7.html

  7. mysql安装不上怎么办 mysql安装失败原因和解决方法

    困难1:MySQL 5.1 安装过程中报apply security setting错误 1.卸载MySQL. 2.删除目录 C:\Documents and Settings\All Users\A ...

  8. 1003: [ZJOI2006]物流运输 最短路+dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=1003 数据范围很小,怎么瞎搞都行,n方dp,然后跑出最短路暴力转移,需要注意的是不能使用的可能有多 ...

  9. 【转】ubuntu下修改文件夹权限

    常用方法如下: sudo chmod 600 ××× (只有所有者有读和写的权限)sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限)sudo chmod 700 ××× ...

  10. 识别User Agent屏蔽一些Web爬虫防采集

    识别User Agent屏蔽一些Web爬虫防采集 from:https://jamesqi.com/%E5%8D%9A%E5%AE%A2/%E8%AF%86%E5%88%ABUser_Agent%E5 ...