2011-12-03 2 views
3

간단한 파이썬 웹 소켓 서버를 구축하려고합니다. 나는 그 핸드 쉐이크와 모든 것을 할 수 있었다. 그러나 브라우저에서받은 메시지를 디코딩하는 방법을 알 수는 없지만 서버가 수신하는 원시 출력은 'xÙõKþ°pãüCY입니다. 어떻게 해독해야합니까?websocket을 통해 전송 된 데이터 디코드

+0

직접 websocket 프로토콜을 구현 했습니까? 아니면 기존의 많은 라이브러리 중 하나를 사용 했습니까? 브라우저와 서버간에 실제로 사용되는 websocket 프로토콜의 여러 버전은 무엇입니까? 최소한의 예를 포함 할 수 있습니까? –

+0

크롬으로 테스트 중이며 버전 8 인 것으로 보입니다. '기본'소켓 라이브러리 인 websocket 라이브러리를 사용하지 않고 있습니다. –

+0

이 답변을 살펴보고 완벽하게 작동합니다. http://stackoverflow.com/a/9778823/1193863 – naren

답변

3

WebSocket 프로토콜에는 framing protocol이 포함됩니다. 브라우저는 원시 응용 프로그램 바이트를 서버로 보내지 않고 그 반대의 경우도 마찬가지입니다. 원시 바이트를 추출하려면 프레이밍 프로토콜을 구문 분석해야합니다.

이 구문 분석을 위해 많은 라이브러리가 구현되었습니다. 아마도 그 중 하나를 사용해보십시오. 그러한 라이브러리 중 하나는 http://pypi.python.org/pypi/txWS/0.6.1이지만 적합하지 않다면 조금 검색 한 다른 라이브러리를 찾을 수 있습니다.

0

클라이언트에서 보내는 메시지는 무엇입니까? 그리고 Chrome 8을 사용하고 계십니까? (이전 버전은 7 버전입니다.) 실제로 최근 Chrome을 사용하는 경우 문제는 페이로드를 마스크 해제하지 못한 것일 수 있습니다. 최신 버전의 프로토콜 (HyBi 시리즈)의 모든 클라이언트 - 서버 데이터는 4 바이트의 XOR 마스크를 사용하여 손상된 중개자가 악의적 인 자바 스크립트에 의해 도용되는 것을 방지합니다.

클라이언트 - 서버 페이로드 마스킹에 대한 설명은 section 5.3 of the spec을 참조하십시오.

페이로드 데이터는 UTF-8로 인코딩되어 있으므로 (이전 프로토콜에서도 마찬가지 임) ASCII 문자열로 처리 할 수는 없습니다.

+0

메시지는 간단한 "Hello World!"입니다. 나는 웹 소켓 버전이 8이라는 것을 의미했다. (브라우저가 핸드 셰이크 중에 이것을 보낸다.> Sec-WebSocket-Version : 8). 페이로드의 언 마스킹은 모든 버전에서 동일한 방식으로 작동합니까? –

+0

그렇다면 페이로드를 마스크 해제해야합니다. 페이로드의 처음 4 바이트는 마스크입니다. 이것들은 다음의 페이로드 스트림과 XOR 될 필요가있다. 마스킹 형식은 도입 된 이후로 변경되지 않았습니다. – kanaka

관련 문제