![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Готов заплатить 20WMZ тому, кто поможет составить ответ сервера по протоколу Websocket(подробнее есть на Википедии).
Протокол вполне простой. Клиент присылает запрос(похоже на HTTP): Код:
GET /demo HTTP/1.1 Upgrade: WebSocket Connection: Upgrade Sec-WebSocket-Key2: 4 @1 46546xW%0l 1 5 Host: example.com Sec-WebSocket-Key1: 12998 5 Y3 1 .P00 Origin: http://example.com WebSocket-Protocol: sample ^n:ds[4U Север должен дать ответ: Код:
HTTP/1.1 101 Web Socket Protocol Handshake Upgrade: WebSocket Connection: Upgrade Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Location: ws://example.com/demo Sec-WebSocket-Protocol: sample 8jKS'y:G*Co,Wxa- То, что выделено красным цветом есть 16-байтное тело ответа, вычисляемое следующим образом: 1. из строки со значением заголовка запроса Sec-WebSocket-Key1 исключить все символы, не являющиеся цифрами (не попадающие в диапазон '0'..'9'); 2. полученную строку превратить в 64-битное целое число (для примера выше получим 1299853100); 3. полученное число разделить целочисленным делением на количество пробелов в исходной строке со значением заголовка; 4. полученное число представить в виде 4-х байтового 32-битного числа в формате big endian: старший байт хранится по нулевому смещению; 5. проделать то же самое с заголовком Sec-WebSocket-Key2; 6. интерпретируя числа из пунктов 4) и 5) как 4-х байтовые строки, конкатенировать их (сложить в одну строку) и добавить как строку тело запроса; 7. вычислить от полученной 16-байтной строки значение MD5 и записать это значение в тело ответа "как есть", без преобразования в какое-либо представление; Всё по пунктам понятно, но как отправить md5-хеш в виде этих кракозябр при помощи функции ServerSocket1.Socket.Connections[0].SendBuf??? |