tcp与http协议 以及python的实现
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的实现的更多相关文章
- Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型
Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...
- arp协议分析&python编程实现arp欺骗抓图片
arp协议分析&python编程实现arp欺骗抓图片 序 学校tcp/ip协议分析课程老师布置的任务,要求分析一种网络协议并且研究安全问题并编程实现,于是我选择了研究arp协议,并且利用pyt ...
- TCP 和 UDP 协议
TCP 和 UDP 协议 一.socket层 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐 ...
- 基于TCP与UDP协议的socket通信
基于TCP与UDP协议的socket通信 C/S架构与初识socket 在开始socket介绍之前,得先知道一个Client端/服务端架构,也就是 C/S 架构,互联网中处处充满了 C/S 架构(Cl ...
- 对TCP/IP网络协议的深入浅出归纳
前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网 ...
- TCP与UDP协议
传输控制协议(Transmission Control Protocol, TCP)和用户数据报协议(User Datagram Protocol, UDP)是典型的传输层协议. 传输层协议基于网络层 ...
- 转:对TCP/IP网络协议的深入浅出归纳
转自:http://blog.jobbole.com/74795/ 前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没 ...
- 对TCP/IP网络协议的深入浅出归纳(转)
前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网 ...
- 关于tcp封装http协议
如果tcp中没有上层协议,那么就是简单的数据包的传输,如果tcp中有上层协议,那么,当客户端把tcp包发给server的时候,server端的socket收到数据包后,从中分离出应用层协议,交给上层继 ...
随机推荐
- 简单的试了试async和await处理异步的方式
今天无意中就来试了试,感觉这个新的方法还是非常行的通的,接下来我们上代码 这段代码想都不用想输出顺序肯定是//null null 233,当然出现这个问题还是因为它是同步,接下来我们就进行异步方式来处 ...
- Sercet sharing
Secret Sharing Shamir门限 条件: \(0<k\leq n<p\) \(S<p,p\)是素数 Lagrange插值公式 \[ f(x)=\sum^{k}_{j=1 ...
- vue_day02
vue_day02 1.绑定事件指令 v-on <body> <div id="app"> <button v-on:click="num+ ...
- win10 系统到期的解决方案
本人是 win10 教育版,今天多次提醒 windows 要到期了(烦银).所以网上找到了解决方法,记录一下. 废话:win10 与之前的 windows 版本一样,有家庭版.专业版.企业版等各个版本 ...
- Window Api 通过账号密码访问共享文件夹
using System; using System.Runtime.InteropServices; namespace PushGCodeService { public class Shared ...
- nginx模块之ngx_http_upstream_module
ngx_http_upstream_module 示例: http上下文: upstream upservers{ ip_hash; //根据客户端IP进行调度,每个客户端ip地址访问时每个ip生成一 ...
- 手写mybatis框架笔记
MyBatis 手写MyBatis流程 架构流程图 封装数据 封装到Configuration中 1.封装全局配置文件,包含数据库连接信息和mappers信息 2.封装*mapper.xml映射文件 ...
- P2048 [NOI2010]超级钢琴 [堆+st表]
考虑只能取长度为 [L,R] 的,然后不难想到用堆搞. 搞个前缀和的st表,里面维护的是一个 最大值的位置 struct rmq { int mx[N][20] ; void qwq(int n) { ...
- webkit 技术内幕 笔记 三
浏览器内核及特性 在浏览器中,一个很重要的模块,是将页面转变成可视化的图像结果,这就是浏览器的内核,通常被称作渲染引擎.渲染:就是根据描述或者定义构建数学模型,通过模型生成图像的过程.浏览器的渲染引擎 ...
- HashMap的一些学习
1.equals和==的对比==用于比较引用和比较基本数据类型时具有不同的功能:A:比较基本数据类型,如果两个值相同,则结果为true而在比较引用时,如果引用指向内存中的同一对象,结果为true; e ...