나는 서버 측에서 WebSocket 프레임 언 마스킹 알고리즘 (this : How can I send and receive WebSocket messages on the server side?)을 구현하려고 시도했다. 여기에 내가 가지고있는 것이있다 :파이썬에서 WebSocket 프레임 디코딩
def decode(data):
frame = bytearray(data)
length = frame[1] & 127
indexFirstMask = 2
if length == 126:
indexFirstMask = 4
elif length == 127:
indexFirstMask = 10
indexFirstDataByte = indexFirstMask + 4
mask = frame[indexFirstMask:indexFirstDataByte]
i = indexFirstDataByte
j = 0
decoded = []
while i < len(frame):
decoded.append(frame[i]^mask[j%4])
i += 1
j += 1
print decoded
return "".join(chr(byte) for byte in decoded)
그러나 나는 아주 이상한 결과를 얻는다. 자바 스크립트 측면에서 :
w = new WebSocket("ws://localhost:2000");
w.send("test");
w.send("test");
w.send("test");
w.send("test");
는 서버 측에서 생성합니다 w.send("test");
에
[42, 73, 45, 46, 1, 0]
[42, 1, 98, 0, 0]
[2, 97, 0, 0]
[2, 97, 0, 0]
더 호출 [2, 97, 0, 0]
을 생산하고 있습니다. 또한 처음 두 배열의 길이는 4보다 큽니다 (단어 test
의 문자 수). 그리고 이들 중 어느 것도 단어 test
으로 변환되지 않습니다. 그것은 내가 디코딩 코드에서 뭔가 잘못하고있는 것으로 보입니다. 그 원인은 무엇입니까? 어떤 도움이 필요합니까?
[193, 134, 48, 166, 232, 11, 26, 239, 197, 37, 49, 166]
[193, 133, 57, 161, 169, 218, 19, 160, 203, 218, 57]
[193, 132, 150, 97, 124, 54, 148, 0, 124, 54]
[193, 132, 163, 26, 102, 249, 161, 123, 102, 249]
[193, 132, 238, 212, 210, 156, 236, 181, 210, 156]
:
편집은 원시 프레임에서 살펴보고 134
이면 133
이고 항상 132
입니다. 또한 처음 두 프레임은 다른 프레임보다 길다. 무슨 일 이니? I는 방금 살펴본
도움이 될만한 답변을 살펴보십시오. http://stackoverflow.com/a/9778823/1193863 – naren