socket_简单报头
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_简单报头的更多相关文章
- 网络编程——socket开发
Socket套接字方法 socket 实例类(8-10分钟) socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) ...
- python报头解决粘包简单实现
client------------- #!/usr/bin/env python # encoding: utf-8 # Date: 2018/6/5 import socketimport st ...
- socket上http协议应用(使用socket进行http通信的例子,准备好报头以后,简单read/write就可以了)
前几天看socket本有点晕, 好不容易弄明白了,才发现公司服务器用的是http的. 找了好久也没发现linux下直接用http的api, 不过今日偶然发现了使用socket进行http通信的例子, ...
- IP报头
位字段的值设置为二进制的0100表示IP版本4(IPv4).设置为0110表示IP版本6(IPv6) 位,它表示32位字长的IP报头长度,设计报头长度的原因是数据包可选字段大小会发生变化.IP ...
- squid介绍及其简单配置
squid的简单介绍 squid的概念 squid是一种用来缓存Internet数据的软件.接受来自人们需要下载的目标(object)的请求并适当的处理这些请求.也就是说,如果一个人想下载一web界面 ...
- Http协议与TCP协议简单理解
TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...
- HTTPS, SPDY和 HTTP/2性能的简单对比
中文原文:HTTPS, SPDY和 HTTP/2性能的简单对比 整理自:A Simple Performance Comparison of HTTPS, SPDY and HTTP/2 请尊重版权, ...
- ASP.NET的SEO:HTTP报头状态码---内容重定向
本系列目录 我们经常说"404错误",你知道他指的是什么意思么? 404其实是Http报头所包含的一个"状态码",表明该Http请求失败.那么除此之外,还有哪些 ...
- ajax原理总结附简单实例及其优点
在工作中用了Ajax N多次了,也看过一些相关方面的书籍,也算是认识了它,但是一直没有认真总结和整理过相关的东东,失败! 近有闲情,将之总结如下: [名称] Ajax是Asynchronous Jav ...
随机推荐
- c++ 计算指定半径圆的面积
#include <iostream> #define PI 3.14 using namespace std; class Circle { float radius; public: ...
- Java Spring-事务管理
2017-11-12 16:31:59 Spring的事务管理分为两种: 编程式的事务管理:手动编写代码 声明式的事务管理:只需要配置就可以 一.最初的环境搭建 public interface Ac ...
- python学习笔记(自定义库文件路径)
博主最近在弄接口自动化.主要是基于python自带的unittest框架.包括 Pubilc模块定义所有接口. Main模块根据业务需求重新封装接口便于测试. config文件导入测试业务的固定参数. ...
- log模块和report模块
这两个模块不需要管,我们生成的log和report直接添加到这里就好
- 最短路径求解(Dijkstra)
Dijkstra算法分析 题目分析参照<数据结构>(严蔚敏)7-6节 最短路径问题描述 参照日常生活中的公交查询系统.我们有选项: 少换乘/最少站数 价格最少/时间最短.... (ps:下 ...
- poj3436网络流之最大流拆点
这题看了半天看不懂题意...还是看的网上题意写的 加一个源点一个汇点,把每个点拆成两个,这两个点的流量是v,其他联通的边都设为无穷大 输入没有1的点就与源点连接,输出只有1的点就与汇点连接 还有这个输 ...
- CORS请求
一.简介 CORS(跨域资源共享 Cross-origin resource sharing)是实现跨域的一种常用方式.实现CORS通信的关键是服务器.只要服务器实现了CORS接口,就可以跨源通信 二 ...
- MMAP文件内存映射
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- Life Cycle(JSF+Facelets)
一.JSF Life Cycle: 图1 图2 应用程序的生命周期是指应用程序的各个阶段,从开始到结束.所有应用程序的生命周期.在web应用程序生命周期中,执行常见任务,包括以下内容.■处理传入的请求 ...
- 作业要求20181023-4 Alpha阶段第2周/共2周 Scrum立会报告+燃尽图 01
作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284] 版本控制:https://git.coding.net/liuyy08 ...