傻瓜式D因直播间弹幕工具界面

这是一个使用Python实现的WebSocket直播间弹幕工具,包括了握手、数据解析和发送等功能。通过接收和处理WebSocket数据,实现了与web端的实时通信,支持中文信息的解码和编码。
摘要由CSDN通过智能技术生成

# coding: utf-8
import socket
import struct
import hashlib, base64
import threading
import time
import datetime

connectionlist = {}  # 存放链接客户fd,元组
g_code_length = 0
g_header_length = 0  # websocket数据头部长度
PRINT_FLAG = True

# 计算web端提交的数据长度并返回
def get_datalength(msg):
    global g_code_length
    global g_header_length
    try:
        g_code_length = msg[1] & 127
        if g_code_length == 126:
            g_code_length = struct.unpack('>H', msg[2:4])[0]
            g_header_length = 8
        elif g_code_length == 127:
            g_code_length = struct.unpack('>Q', msg[2:10])[0]
            g_header_length = 14
        else:
            g_header_length = 6
        g_code_length = int(g_code_length)
    except Exception as e:
        pass
    return g_code_length


# 解析web端提交的bytes信息,返回str信息(可以解析中文信息)
def parse_data(msg):
    global g_code_length
    g_code_length = msg[1] & 127
    if g_code_length == 126:
        g_code_length = struct.unpack('>H', msg[2:4])[0]
        masks = msg[4:8]
        data = msg[8:]
    elif g_code_length == 127:
        g_code_length = struct.unpack('>Q', msg[2:10])[0]
        masks = msg[10:14]
        data = msg[14:]
    else:
        masks = msg[2:6]
        data = msg[6:]
    en_bytes = b""
    cn_bytes = []
    for i, d in enumerate(data):
        nv = chr(d ^ masks[i % 4])
        nv_bytes = nv.encode()
        nv_len = len(nv_bytes)
        if nv_len == 1:
            en_bytes += nv_bytes
        else:
            en_bytes += b'%s'
            cn_bytes.append(ord(nv_bytes.decode()))
    if len(cn_bytes) > 2:
        cn_str = ""
        clen = len(cn_bytes)
        count = int(clen / 3)
        for x in range(count):
            i = x * 3
            b = bytes([cn_bytes[i], cn_bytes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值