有个字符python打印出来是0003,这是什么字符啊?

 Aries小阳光 发布于 2022-10-27 03:31

#!/usr/bin/env python
import socket
import base64
import json
import hashlib
import struct
from select import select
class dryWebSocket():
    #####
    @staticmethod
    def handShake(serverHandle):
        key = ''
        data = serverHandle.recv(8192)
        for line in data.split('\r\n\r\n')[0].split('\r\n')[1:]:
            k, v = line.split(': ')
            if k == 'Sec-WebSocket-Key':
                key = base64.b64encode(hashlib.sha1(v + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11').digest())
        response = 'HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept:%s\r\n\r\n' % key
        serverHandle.send(response)
        return True
    #####
    @staticmethod
    def recv(serverHandle, size=1048576):
        data = serverHandle.recv(size)
        if not len(data):
            return False
        length = ord(data[1]) & 127
        if length == 126:
            mask = data[4:8]
            raw = data[8:]
        elif length == 127:
            mask = data[10:14]
            raw = data[14:]
        else:
            mask = data[2:6]
            raw = data[6:]
        ret = ''
        for cnt, d in enumerate(raw):
            ret += chr(ord(d) ^ ord(mask[cnt%4]))
        return ret
    #####
    @staticmethod
    def send(serverHandle, data):
        head = '\x81'
        if len(data) < 126:
            head += struct.pack('B', len(data))
        elif len(data) <= 0xFFFF:
            head += struct.pack('!BH', 126, len(data))
        else:
            head += struct.pack('!BQ', 127, len(data))
        serverHandle.send(head + data)
##########################################################################################
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
socketList = set()
##########
def run(ip, port, count, function, debug):
    server.bind((ip, port))
    server.listen(count)
    socketList.add(server)
    print 'websocket server start on port %d' % port
    while True:
        r, w, e = select(socketList, [], [])
        for sock in r:
            if sock == server:
                serverHandle, addr = sock.accept()
                if dryWebSocket.handShake(serverHandle):
                    socketList.add(serverHandle)
            else:
                data = dryWebSocket.recv(sock)
                if not data:
                    socketList.remove(sock)
                else:
                    if data!='\r':
                        function(sock, data, debug)
##########
def dataDo(serverHandle, data, debug):
    if debug:
        print data
    result={}
    try:
        jsonData=json.loads(data)
        result['status']='0'
        result['msg']=''
        result['data']={}
        result['data']['src']='https://www.baidu.com/img/bd_logo1.png'
        content=json.dumps(result)
        dryWebSocket.send(serverHandle, content)





    finally:
        print data
       











##########
if __name__ == '__main__':
    run('0.0.0.0', 50001, 1, dataDo, True)

浏览器会连接这个websocket,浏览器第二次刷新连接就会出现这个字符,然后服务端的websocket就会退出

1 个回答
  • 贴下打印的是哪两个字符

    2022-10-27 03:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有