draft 00과 같이 draft 17과 이전 버전을 모두 지원해야하는 작은 WebSocket 서버 응용 프로그램을 작성했습니다. 나는 최신 초안에 아무런 문제가 없었지만, 초안 00 클라이언트를 행복하게 만들 수는 없습니다. 테스트 목적서버 측 초안 WebSockets 핸드 셰이크 응답
난 (이전) 공식에 제공된 예를 사용 draft 00 docuemnt 페이지 7
Sec-WebSocket-Key1: 18x 6]8vM;54 *(5: { U1]8 z [ 8
Sec-WebSocket-Key2: 1_ tx7X d < nw 334J702) 7]o}` 0
Tm[K T2u
숫자들을 연결 및 스페이스로 나누어 키를 계산
카운트는, I는 두 정수 따라 얻을 및 (이 두 개의 숫자가 문서에도 있음).- 문자열에 연결하여
- 빅 엔디안에 개별적으로 결과를 변환하고 지난 8 비트 (
Tm[K T2u
)를 추가합니다다음, 그것은에 말한다.
- 내가 다음 코드 제작 한이 지식
무장 단계 1과 2에서 생성 된 문자열에서 128 비트 MD5 합계 만들기 : 여기
#define BYTE 8
#define WORD 16
// Little Endian to Big Endian short
#define LE_TO_BE_SHORT(SHORT)\
(((SHORT >> BYTE) & 0x00FF) | ((SHORT << BYTE) & 0xFF00))
// Little Endian to Big Endian long
#define LE_TO_BE_LONG(LONG)\
(((LE_TO_BE_SHORT(LONG >> WORD)) | \
((LE_TO_BE_SHORT((LONG & 0xFFFF)) << WORD))))
uint num1 = LE_TO_BE_LONG(155712099);
uint num2 = LE_TO_BE_LONG(173347027);
QString cookie = QString::fromUtf8("Tm[K T2u");
QString c = QString::number(num1) + QString::number(num2) + cookie;
QByteArray data = c.toUtf8();
qDebug() << QCryptographicHash::hash(data, QCryptographicHash::Md5);
것은 내가 무엇을 얻을 :
←→»α√r¼??┐☺║Pa♠µ
그리고 여기가
(초안 예에 따라, 다시) 예상 무슨이다다른 측면에서, 나는 wikipedia article이 엔디안 변환에 대해 언급하지 않는다는 것을 알아 챘습니다. 위의 코드를 변환하지 않고 (위키 피 디아 예제와 초안의 예제 모두) 시도했지만 여전히 예상 결과를 재현 할 수 없습니다.
누구나 여기서 문제를 지적 할 수 있습니까?
는 편집 : 나는 this document이 프로토콜의 더 나은 설명이 발견했다. 그것은 다른 드래프트 (76)이지만 핸드 셰이크 측면에서 00과 유사합니다.
+1 고마워, 나는 네가 대답하고있는 것처럼 내 솔루션도 추가하고 있었다 :) – unexplored