群聊

from flask import Flask, request, render_templatefrom geventwebsocket.handler import WebSocketHandlerfrom gevent.pywsgi import WSGIServer

from geventwebsocket.websocket import WebSocket

app = Flask(__name__)  # type:Flask

user_socket_list = []

@app.route("/ws")def ws():    user_socket = request.environ.get("wsgi.websocket")  # type:WebSocket    if user_socket:        user_socket_list.append(user_socket)    print(len(user_socket_list), user_socket_list)    while 1:        msg = user_socket.receive()        print(msg)        for usocket in user_socket_list:            if user_socket == usocket:                continue            try:                usocket.send(msg)            except:                continue

@app.route("/")def index():    return render_template("ws.html")

if __name__ == '__main__':    # app.run("0.0.0.0",5000,debug=True)    http_serv = WSGIServer(("0.0.0.0", 5000), app, handler_class=WebSocketHandler)    http_serv.serve_forever()**************************************************************************************************************************************************
<!DOCTYPE html><html lang="zh-CN"><head>    <meta http-equiv="content-Type" charset="UTF-8">    <meta http-equiv="x-ua-compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1">    <title>Title</title></head><body><p>发送内容:<input type="text" id="message"><button onclick="send_msg()">发送消息</button></p><div id="msg_list" style="width: 500px;">

</div></body><script type="application/javascript">    var ws = new WebSocket("ws://127.0.0.1:5000/ws");    // ws.onopen = function(){    //   alert("欢迎来到S14群喷");    // };    ws.onmessage = function (ws_status) {        console.log(ws_status.data);        var ptag = document.createElement("p");        ptag.innerText = ws_status.data;        document.getElementById("msg_list").appendChild(ptag);    };

    function send_msg() {        var msg = document.getElementById("message").value;        var ptag = document.createElement("p");        ptag.style.cssText = "text-align: right;";        ptag.innerText = msg;        document.getElementById("msg_list").appendChild(ptag);        ws.send(msg);    }</script></html>

单聊

from flask import Flask, request, render_templatefrom geventwebsocket.handler import WebSocketHandlerfrom gevent.pywsgi import WSGIServerimport json

from geventwebsocket.websocket import WebSocket

app = Flask(__name__)  # type:Flask

user_socket_dict = {}

@app.route("/ws/<user>")def ws(user):    user_socket = request.environ.get("wsgi.websocket")  # type:WebSocket    if user_socket:        user_socket_dict[user] = user_socket    print(len(user_socket_dict), user_socket_dict)    while 1:        msg = user_socket.receive()        print(msg)  # b"{from_user:jinwangba ,to_user:yinwangba,msg:"doushidawangba"}"        msg_dict = json.loads(msg)        to_usocket = user_socket_dict.get(msg_dict.get("to_user"))        to_usocket.send(json.dumps({"from_user": user, "to_user": msg_dict.get("to_user"), "msg": msg_dict.get("msg")}))

@app.route("/")def index():    return render_template("wsd.html")

if __name__ == '__main__':    # app.run("0.0.0.0",5000,debug=True)    http_serv = WSGIServer(("0.0.0.0", 5000), app, handler_class=WebSocketHandler)    http_serv.serve_forever()

*********************************************************************************************************************************************************************************************

<!DOCTYPE html><html lang="zh-CN"><head>    <meta http-equiv="content-Type" charset="UTF-8">    <meta http-equiv="x-ua-compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1">    <title>Title</title></head><body><p>您的昵称:<input type="text" id="nick"><button onclick="openws()">进入聊天室</button></p><p>给<input type="text" id="to_user">发送:<input type="text" id="message"><button onclick="send_msg()">发送消息</button></p><div id="msg_list" style="width: 500px;">

</div></body><script type="application/javascript">    var ws = null;    // ws.onopen = function(){    //   alert("欢迎来到S14群喷");    // };

    function openws(){        var nick = document.getElementById("nick").value;        ws = new WebSocket("ws://127.0.0.1:5000/ws/"+nick);        ws.onmessage = function (ws_status) {            console.log(ws_status.data);            var msg_obj = JSON.parse(ws_status.data);            var ptag = document.createElement("p");            ptag.innerText = msg_obj.from_user + " : " +msg_obj.msg;            document.getElementById("msg_list").appendChild(ptag);        };    }

    function send_msg() {        var msg = document.getElementById("message").value;        var from_user = document.getElementById("nick").value;        var to_user = document.getElementById("to_user").value;        var ptag = document.createElement("p");        ptag.style.cssText = "text-align: right;";        ptag.innerText = msg + " : "+ from_user;        document.getElementById("msg_list").appendChild(ptag);        var msg_obj = {            msg:msg,            from_user:from_user,            to_user:to_user        };        ws.send(JSON.stringify(msg_obj));    };

</script></html>

加密

加密:

 1 import struct
 2 msg_bytes = "hello".encode("utf8")
 3 token = b"\x81"
 4 length = len(msg_bytes)
 5
 6 if length < 126:
 7     token += struct.pack("B", length)
 8 elif length == 126:
 9     token += struct.pack("!BH", 126, length)
10 else:
11     token += struct.pack("!BQ", 127, length)
12
13 msg = token + msg_bytes
14
15 print(msg)

解密

解密:

 1 # b'\x81\x83\xceH\xb6\x85\xffz\x85'
 2
 3 hashstr = b'\x81\x83\xceH\xb6\x85\xffz\x85'
 4 # b'\x81    \x83    \xceH\xb6\x85\xffz\x85'
 5
 6 # 将第二个字节也就是 \x83 第9-16位 进行与127进行位运算
 7 payload = hashstr[1] & 127
 8 print(payload)
 9 if payload == 127:
10     extend_payload_len = hashstr[2:10]
11     mask = hashstr[10:14]
12     decoded = hashstr[14:]
13 # 当位运算结果等于127时,则第3-10个字节为数据长度
14 # 第11-14字节为mask 解密所需字符串
15 # 则数据为第15字节至结尾
16
17 if payload == 126:
18     extend_payload_len = hashstr[2:4]
19     mask = hashstr[4:8]
20     decoded = hashstr[8:]
21 # 当位运算结果等于126时,则第3-4个字节为数据长度
22 # 第5-8字节为mask 解密所需字符串
23 # 则数据为第9字节至结尾
24
25
26 if payload <= 125:
27     extend_payload_len = None
28     mask = hashstr[2:6]
29     decoded = hashstr[6:]
30
31 # 当位运算结果小于等于125时,则这个数字就是数据的长度
32 # 第3-6字节为mask 解密所需字符串
33 # 则数据为第7字节至结尾
34
35 str_byte = bytearray()
36
37 for i in range(len(decoded)):
38     byte = decoded[i] ^ mask[i % 4]
39     str_byte.append(byte)
40
41 print(str_byte.decode("utf8"))
 1 # b'\x81\x83\xceH\xb6\x85\xffz\x85'
 2
 3 hashstr = b'\x81\x83\xceH\xb6\x85\xffz\x85'
 4 # b'\x81    \x83    \xceH\xb6\x85\xffz\x85'
 5
 6 # 将第二个字节也就是 \x83 第9-16位 进行与127进行位运算
 7 payload = hashstr[1] & 127
 8 print(payload)
 9 if payload == 127:
10     extend_payload_len = hashstr[2:10]
11     mask = hashstr[10:14]
12     decoded = hashstr[14:]
13 # 当位运算结果等于127时,则第3-10个字节为数据长度
14 # 第11-14字节为mask 解密所需字符串
15 # 则数据为第15字节至结尾
16
17 if payload == 126:
18     extend_payload_len = hashstr[2:4]
19     mask = hashstr[4:8]
20     decoded = hashstr[8:]
21 # 当位运算结果等于126时,则第3-4个字节为数据长度
22 # 第5-8字节为mask 解密所需字符串
23 # 则数据为第9字节至结尾
24
25
26 if payload <= 125:
27     extend_payload_len = None
28     mask = hashstr[2:6]
29     decoded = hashstr[6:]
30
31 # 当位运算结果小于等于125时,则这个数字就是数据的长度
32 # 第3-6字节为mask 解密所需字符串
33 # 则数据为第7字节至结尾
34
35 str_byte = bytearray()
36
37 for i in range(len(decoded)):
38     byte = decoded[i] ^ mask[i % 4]
39     str_byte.append(byte)
40
41 print(str_byte.decode("utf8"))

websocket 群聊,单聊,加密,解密的更多相关文章

  1. websocket 群聊单聊

    websocket 介绍 介绍引自 https://segmentfault.com/a/1190000012709475 群聊 from flask import Flask, request, r ...

  2. Flask请求上下文源码讲解,简单的群聊单聊web

    请求上下文流程图 群聊html代码 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  3. Flask-session,WTForms,POOL,Websocket通讯原理 -握手,加密解密过程

    1.Flask-session Flask中的session 需要执行 session_interface - open_session存储到redis中,存的key:session:d3f07db2 ...

  4. websocket实现群聊和单聊(转)

    昨日内容回顾 1.Flask路由 1.endpoint="user" # 反向url地址 2.url_address = url_for("user") 3.m ...

  5. flask 第五章 WebSocket GeventWebsocket 单聊群聊 握手 解密 加密

    1.WebSocket 首先我们来回顾一下,我们之前用socket学习过的项目有: 1.django 2.flask 3.FTP - 文件服务 HTTP - TCP (特点): 1.一次请求,一次响应 ...

  6. websocket 实现单聊群聊 以及 握手原理+加密方式

    WebSocket 开始代码 服务端 群聊 # type:WebSocket 给变量标注类型 # websocket web + socket from geventwebsocket.server ...

  7. 基于websocket的单聊.群聊

    关于ai.baidu.com的 代码: #########################################核心代码################################### ...

  8. Websocket实现群聊、单聊

    Websocket 使用的第三方模块:gevent-websocket 群聊 ws群聊.py中的内容 from flask import Flask, request, render_template ...

  9. WebSocket群聊与单聊

    一 . WebSocket实现群聊 py文件代码 # py文件 from flask import Flask, render_template, request from geventwebsock ...

随机推荐

  1. reduceByKey和groupByKey区别与用法

    在spark中,我们知道一切的操作都是基于RDD的.在使用中,RDD有一种非常特殊也是非常实用的format——pair RDD,即RDD的每一行是(key, value)的格式.这种格式很像Pyth ...

  2. idea补丁破解

    1.下载JetbrainsCrack-2.9-release-enc.jar破解补丁,下载地址:http://idea.lanyus.com 2.将其放在你的安装 idea下面的根目录下面 3.修改根 ...

  3. PHP代码实现2 [从变量和数据的角度] 1

    PHP代码实现2 [从变量和数据的角度] 1 数据类型 1.静态类型语言,比如:C/Java等,在静态语言类型中,类型的检查是在<编译>(compile-time)确定的, 也就是说在运行 ...

  4. MySQL性能管理及架构设计

    第1章 实例和故事 1-1 什么决定了电商双11大促的成败 老板可能会说:"是我们的英明决策和运筹帷幄". 运营和产品可能会说:"是由于我们的活动策划和产品设计" ...

  5. 在VMware中安装Mac OS

    macOS与Darwin http://blog.csdn.net/hintcnuie/article/details/38468093 OS X 是整个操作系统的一个集体名称.而Darwin 就是其 ...

  6. php中的this,self,parent

    this就是指向当前对象实例的指针,不指向任何其他对象或类 如$this->fun1(); self:指向类本身,也就是self是不指向任何已经实例化的对象 ,self使用来指向类中的静态属性或 ...

  7. 黄聪:TortoiseGit(乌龟git)保存用户名密码的方法

    1.在项目文件夹右键--tortoiseGit--设置 2.编辑全局.git/config 3.加上这行代码 里面会有你先前配好的name 和email,只需在下面加一行 [credential] h ...

  8. Python selenium —— selenium与自动化测试成神之路

    From: https://blog.csdn.net/huilan_same/article/details/52559711 忽然想谈谈自动化的学习路径,因为发现很多人总是急于求成,不懂该如何学习 ...

  9. eclipse 修改 项目的git地址

    在项目的隐藏目录.git 文件夹下面 修改config配置文件 [core] symlinks = false repositoryformatversion = 0 filemode = false ...

  10. 【redis】之centos6.x安装redis3.0.x

    centos6.9_x86_64 1.下载redis安装包 http://download.redis.io/releases/redis-3.2.9.tar.gz 2.解压 编译到指定得目录 mak ...