htpp协议 Rquest Headers格式:

  请求方法空格URL空格协议版本回车符换行符

  头部字段名:值回车符换行符

  ···

  头部字段名:值回车符换行符

  回车符换行符

  请求数据

socket网络聊天

服务端

#sokcet服务断
import socket
import threading
server = socket.socket()
# 绑定到0.0.0.0:8000端口上
server.bind(('0.0.0.0',8000)) # 如果是绑定127.0.0.1,那么只能本地连接
server.listen() def handle_sock(sock,addr):
while True:
# recv是阻塞的
tmp_data = sock.recv(1024)
print(tmp_data.decode("utf8"))
input_data = input()
sock.send(input_data.encode("utf8"))
# 获取客户端连接并启动线程去处理
while True:
# 阻塞,等待连接
sock,addr = server.accept() # 启动一个线程去处理新的用户连接
client_thread = threading.Thread(target=handle_sock,args=(sock,addr))
client_thread.start()
# sock.close()

客户端

# socket客户端
import socket
client = socket.socket()
client.connect(('192.168.2.129',8000))
while True: input_data = input()
client.send(input_data.encode('utf8'))
server_data = client.recv(1024)
print(server_data.decode('utf8')) client.close()

socket模拟http实现拉取百度首页源码:

# socket客户端
import socket
http_client = socket.socket()
http_client.connect(('www.baidu.com',80))
html = "GET / HTTP/1.1\r\nConnection:close\r\n\r\n"
http_client.send(html.encode("utf8")); data = b""
while True:
tmp = http_client.recv(1024)
if tmp:
data += tmp;
else:
break
print(data.decode('utf8'))
input()

socket模拟http实现nginx接受访问:

#tcp实现http协议
import socket
server = socket.socket() server.bind(('0.0.0.0',80))
server.listen()
# 获取客户端连接并启动线程去处理
while True:
print("等待连接")
# 阻塞,等待连接
sock,addr = server.accept()
tmp_data = sock.recv(1024)
print("收到浏览器信息:")
print(tmp_data.decode("utf8"))
# 谷歌浏览器访问 打印为:
# GET / HTTP/1.1
# Host: 192.168.2.129
# Connection: keep-alive
# Cache-Control: max-age=0
# Upgrade-Insecure-Requests: 1
# User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
# Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
# Accept-Encoding: gzip, deflate
# Accept-Language: zh-CN,zh;q=0.9
response_template = '''HTTP/1.1 200 OK <h1>hello</h1>'''
sock.send(response_template.encode("utf8"))
# 浏览器展示形式为:
# Request URL: http://192.168.2.129/
# Request Method: GET
# Status Code: 200 OK
# Remote Address: 192.168.2.129:80
# Referrer Policy: no-referrer-when-downgrade
print("已回信息")
sock.close()
print("已断开连接")

Rquest Headers

tcp与http协议 以及python的实现的更多相关文章

  1. Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型

    Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...

  2. arp协议分析&python编程实现arp欺骗抓图片

    arp协议分析&python编程实现arp欺骗抓图片 序 学校tcp/ip协议分析课程老师布置的任务,要求分析一种网络协议并且研究安全问题并编程实现,于是我选择了研究arp协议,并且利用pyt ...

  3. TCP 和 UDP 协议

    TCP 和 UDP 协议 一.socket层 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐 ...

  4. 基于TCP与UDP协议的socket通信

    基于TCP与UDP协议的socket通信 C/S架构与初识socket 在开始socket介绍之前,得先知道一个Client端/服务端架构,也就是 C/S 架构,互联网中处处充满了 C/S 架构(Cl ...

  5. 对TCP/IP网络协议的深入浅出归纳

    前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网 ...

  6. TCP与UDP协议

    传输控制协议(Transmission Control Protocol, TCP)和用户数据报协议(User Datagram Protocol, UDP)是典型的传输层协议. 传输层协议基于网络层 ...

  7. 转:对TCP/IP网络协议的深入浅出归纳

    转自:http://blog.jobbole.com/74795/ 前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没 ...

  8. 对TCP/IP网络协议的深入浅出归纳(转)

    前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网 ...

  9. 关于tcp封装http协议

    如果tcp中没有上层协议,那么就是简单的数据包的传输,如果tcp中有上层协议,那么,当客户端把tcp包发给server的时候,server端的socket收到数据包后,从中分离出应用层协议,交给上层继 ...

随机推荐

  1. 第10章 DOM

    第10章 DOM 10.1 节点层次 10.1.1 Node 类型 10.1.2 Document 类型 10.1.3 Element 类型 10.1.4 Text 类型 10.1.5 Comment ...

  2. Django 表关系的创建

    Django 表关系的创建 我们知道,表关系分为一对多,多对多,一对一 我们以一个图书管理系统为背景,设计了下述四张表,让我们来找一找它们之间的关系 Book与Publish表 找关系:一对多 左表( ...

  3. oracle快速创建用户、imp/exp导入导出dmp文件

    1.首先我们可以用管理员用户以sysdba的身份登录oracle sqlplus username/password as sysdba 2.然后我就可以来创建用户了. create user use ...

  4. 探究Redis两种持久化方式下的数据恢复

    对长期奋战在一线的后端开发人员来说,都知道redis有两种持久化方式RDB和AOF,虽说大家都知道这两种方式大概运作方式,但想必有实操的人不会太多. 这里是自己实操两种持久化方式的一点点记录. 先看以 ...

  5. 剑指offer-面试题54-二叉搜索树的第k大节点-中序遍历

    /* 题目: 求二叉搜索树的第k大节点. */ /* 思路: 中序遍历. */ #include<iostream> #include<cstring> #include< ...

  6. [Python机器学习]鸢尾花分类 机器学习应用

    1.问题简述 假设有一名植物学爱好者对她发现的鸢尾花的品种很感兴趣.她收集了每朵鸢尾花的一些测量数据: 花瓣的长度和宽度以及花萼的长度和宽度,所有测量结果的单位都是厘米. 她还有一些鸢尾花的测量数据, ...

  7. 安装MongoDB到Ubuntu(APT)

    运行环境 系统版本:Ubuntu 16.04.5 LTS 软件版本:mongodb-org-4.0.8 硬件要求:无 安装过程 1.配置APT-Mongodb存储库 ATP-Mongodb存储库由Mo ...

  8. 数据库MySQL之show processlist

    在实际项目开发中,如果我们对数据库的压力比较大,比如有大批量的查询或者插入等sql,尤其是多线程插入等情况,针对部分执行比较慢的sql,我们可以将其kill掉,常用的一个命令就是show proces ...

  9. 当课堂因监控技术变“囚笼”,存在争议的AI使用场景该被抵制吗?

    当马云和马斯克高谈阔论AI是否会影响人类社会时,尚无"感情"的AI已在校园中"作恶".近日,一张AI监控课堂的GIF在网上迅速刷屏.这张GIF中记录了课堂中所有 ...

  10. H5_0024:对于事先无法确定css大小的情况,可以通过JS动态修改

            $(function(){             function Heights(){                 var WinH = $(window).height(); ...