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

WebSocket server c++ - C++

Восстановить пароль Регистрация
 
OrmaJever
 Аватар для OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
04.06.2014, 17:27     WebSocket server c++ #1
Тема для тех кто сталкивался с вебсокетами.
Пишу сервер протокола 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

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

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

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