![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Готов заплатить 20WMZ тому, кто поможет составить ответ сервера по протоколу Websocket(подробнее есть на Википедии).
Протокол вполне простой. Клиент присылает запрос(похоже на HTTP): Код:
Север должен дать ответ: Код:
То, что выделено красным цветом есть 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??? |
#2
|
||||
|
||||
![]() так а что не понятного. вычисляешь хеш:
Код:
и отправляешь его строчкой serverSocket1.Socket.Connections[0].SendText |
#3
|
|||||||
|
|||||||
![]() Цитата:
SendText отправляет текстовые строки. И эта ваша функция вернёт строку такого плана d41d8cd98f00b204e9800998ecf8427e. Поэтому ответ сервера будет выглядеть так(смотрю сниффером портов): Код:
А надо так: Код:
|
#4
|
||||
|
||||
![]() А если так
Код:
только уже через sendbuff |