Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
OrmaJever
 Аватар для OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
#1

WebSocket server c++ - C++

04.06.2014, 17:27. Просмотров 1025. Ответов 0
Метки нет (Все метки)

Тема для тех кто сталкивался с вебсокетами.
Пишу сервер протокола WebScoket, пакеты в протоколе имеют свою структуру http://learn.javascript.ru/websockets#описание-фрейма, я написал метод который создаёт такой пакет
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
qint64 Client::writePack(const char *data, char type)
{
    char *pack = (char *)malloc(2);
    unsigned char headLen = 2;
    unsigned long long length = 0;
    while(data[length] != '\0') ++length;
 
    pack[0] = (1<<7) | type;
    pack[1] = 0;
 
    if(length <= 125)  {
        pack[1] |= length;
    } else if(length <= 65536) {
        pack[1] |= 126;
 
        char len[2];
        len[0] = ( length >> 8 ) & 255;
        len[1] = ( length ) & 255;
 
        pack = (char *)realloc(pack, 4);
        memcpy(pack+headLen, len, 2);
        headLen += 2;
    } else if(length > 65536) {
        pack[1] |= 127;
        pack = (char *)realloc(pack, 10);
 
        char len[8];
        len[0] = ( length >> 56 ) & 255;
        len[1] = ( length >> 48  ) & 255;
        len[2] = ( length >> 40 ) & 255;
        len[3] = ( length >> 32  ) & 255;
        len[4] = ( length >> 24 ) & 255;
        len[5] = ( length >> 16  ) & 255;
        len[6] = ( length >> 8 ) & 255;
        len[7] = ( length ) & 255;
 
        memcpy(pack+headLen, len, 8);
        headLen += 8;
    }
 
    pack = (char *)realloc(pack, headLen+length+1);
    memcpy(pack+headLen, data, length+1);
    return write(pack);
}

И он даже работает, но только когда длина данных <= 125байт, как только передаю данные больше 125байт браузер его просто игнорит. Я проверял первые 4 байта, в них лежи всё как нужно 126 во втором байте, 0 в 3 и 130 в 4 (для длины 130байт), дальше сами данные, но сервер его просто игнорит, при этом для длины меньше 126 байт браузер принимает всё отлично. Уже второй день голову ломаю, помогите кто чем может

Добавлено через 3 часа 28 минут
я всё ещё надеюсь что есть те кто работал с веб сокетами
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2014, 17:27     WebSocket server c++
Посмотрите здесь:

C++ Proxy server
indy Telnet server C++
C++ C++ + T-SQL(MS Server 2008)
Socks5 Server C++
C++ WinSock tcp client/server
Запрос информации о пользователь*ских соединениях с Terminal Server C++
C++ Server Socket и прием данных
C++ Как объединить с++ и sql server
C++ Imagine your task is to create a high-traffic web server in C++.What multiplexing options are available to you
Подключиться к базе данных созданной в sql server C++
C++ Client-Server C++ Win32 NTW 2013
C++ Client-Server C++ Win32 NTW 2013 ERROR

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 00:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru