常见代理:websocket、sockets


8.11 常见代理

  • http/HTTPS:应用层
  • socket: 底层协议,抽象的
  • sockets: 不关心是什么协议 ,更万能(也是从应用层发起的)

         

  •  websocket: 双向的,协议 (比如:聊天框)
  •  websockets: 工具,这个工具实现了websocket

8.11.1 websockets

应用:微信、QQ  (双向通信)

websockets 是对 http的改造

8.11.1.1 客户端代码

ws_client.py

# -*- coding: utf-8 -*-
# @Time    : 2020/11/21 16:49
# @Author  : 饭盆里
# @File    : ws_client.py
# @Software: PyCharm
# @desc    :
import asyncio
import websockets

async def hello():
    uri = 'ws://127.0.0.1:8211'
    async with websockets.connect(uri) as websocket:
        name = input("you are ?  ")
        await websocket.send(name)
        print(f">>{name}")

        greeting = await websocket.recv()
        print(f"<<{greeting}")

asyncio.get_event_loop().run_until_complete(hello())

8.11.1.2 服务端代码

ws_server.py

# -*- coding: utf-8 -*-
# @Time    : 2020/11/21 16:49
# @Author  : 饭盆里
# @File    : ws_server.py
# @Software: PyCharm
# @desc    :
import asyncio
import websockets

async  def hello(websocket,path):
    name = await websocket.recv()
    print(f'<<{name}')

    greeting = f"hello {name}"
    print(f'>>{greeting}')

start_server = websockets.serve(hello,'127.0.0.1',8211)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

8.11.1.3 运行

在终端先运行服务器代码:           python ws_server.py

然后在另开一个窗口运行客户端:  ws_client.py

则可以在服务器客户端 输出中看到问候

 目前遇到一个报错如图:尚未解决???????????????????????????????

 

 8.11.1.4 反向代理实现websockets通讯走Charles

  • 将代码服务器的端口改为:8212
  • 配置Charles反向代理,将本地发起的请求映射到服务器的端口上

        

  • 则现在发送的请求都会经过Charles

        TLS: 是对SSL的改进,SSL的标准化 

  

8.11.2 socket的应用

8.11.2.1 socket:底层通讯机制,多层技术的应用

        

  •         socket 是将TCP、UDP等抽象的东西进行了实现 
  •         HTTPS 是对socket的封装 ,HTTPS里面包含了socket、SSL等

8.11.2.2 socket的server端代码

import socket

#创建socket对象
s = socket.socket()
#绑定端口
s.bind(('127.0.0.1',12345))

#等待客户端连接
s.listen(5)

while True:
    #建立客户端连接
    c,addr = s.accept()
    print("连接地址",addr)
    c.send('你好'.encode())
    c.close()

8.11.2.3 socket的client端代码

import socket

s =socket.socket()
s.connect(("127.0.0.1",12345))
print('hello')
print(s.recv(1024).decode())
s.close()

8.11.2.4 连接

  • 服务端:
  • 客户端:
  • 不能用Charles抓包,可以用tcpdump试试

 8.11.3 区别

  • websocket:应用层的一个协议
  • socket :抽象接口,底层
  • socks代理:一种技术

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM