@Dimazsever

Почему скрипт не может подключиться через веб-сокет?

В чем проблема? Пытаюсь отправить сообщение через веб-сокет, но скрипт выдает ошибку:
Traceback (most recent call last):
File "C:\socket.py", line 19, in
key = re.findall(r'Sec-WebSocket-Key:\s*(\S+)\r\n', data)[0] + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
File "C:\Program Files (x86)\Python\lib\re.py", line 206, in findall
return _compile(pattern, flags).findall(string)
TypeError: can't use a string pattern on a bytes-like object

Этот код по утверждению работает у другого человека. У него макбук. У меня windows 7. Не может же быть, что проблема в ОС.
#!/usr/bin/env python3
import socket
import re
from  hashlib import sha1
from base64 import b64encode
 
HANDSHAKE  = 'HTTP/1.1 101 Switching Protocols\r\n\
Upgrade: websocket\r\n\
Connection: Upgrade\r\n\
Sec-WebSocket-Accept: {0}\r\n\r\n'
 
sock = socket.socket()
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("", 1337))
sock.listen(5)
while True:
    conn, addr = sock.accept()
    data = conn.recv(2048)
    key = re.findall(r'Sec-WebSocket-Key:\s*(\S+)\r\n', data)[0] + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
    accept = b64encode(sha1(key).digest())
 
    conn.send(HANDSHAKE.format(accept))
    conn.close()
  • Вопрос задан
  • 407 просмотров
Решения вопроса 1
mramor
@mramor
нечего о себе рассказывать.
Он может подключится, падает же по другой причине. Если я верно понял дело в кодировке. Попробуйте перед регуляркой сменить кодировку у того, что в data. Типа data.decode('utf-8')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kivsiak
@kivsiak
software engineer
Может потому что разные питоны? Эта ошибка характерна для 3 Замени префикс r на b в регулярке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы