отправка данных между erlang и переполнением стека

Я использую соединение TCP для отправки данных на сервер C ++. Я читал о библиотеке ei, которая при наличии двоичного файла имеет набор функций для получения декодированного значения из двоичного файла. Egs, ei_decode_string, ei_decode_long и другие.

Я пытаюсь сделать эти простые вещи:
1. создать сокет и подключиться к нему.

{ok, Socket} = gen_tcp:connect({127,0,0,1}, 8986, []).

2. Используйте gen_tcp: send / 2 для отправки данных.

gen_tcp:send(Socket, term_to_binary("Stackoverflow")).

Поэтому я отправляю двоичный формат строки на сервер.

Мой сервер, код C ++, получает данные, и я пытаюсь получить все, что клиент отправляет мне через сокет, используя ei_decode_string, например:

В идеале, при декодировании я должен получить обратно строку «Stackoverflow», поскольку я сказал ему decode_as_string из двоичного файла. Убедитесь, что у меня достаточно места в полученном буфере.

char *p = (char*)malloc(sizeof(char) * 100);
int index = 0;
int decoded = ei_decode_string(buff, &index, p);
cout<<"The decoded value is "<<p<<endl;

Я не могу расшифровать строку, которую я отправил. Я что-то пропустил? Как я могу отправлять данные и декодировать их на стороне сервера, если это не правильный подход.

Спасибо вам за помощь!

3

Решение

1> term_to_binary("Stackoverflow").
<<131,107,0,13,83,116,97,99,107,111,118,101,114,102,108,
111,119>>

Здесь первый элемент в двоичном коде — это не строка в виде маленьких целых чисел, а номер версии (131), как описано в Внешний термин Формат. После этого идут термины, каждый с префиксом тега, а затем соответствующие данные. В этом случае тег 107 STRING_EXTдва байта для длины (13) и затем 13 8-битных целых, первое 83 соответствует букве ‘S’ (83 в ascii).

Чтобы правильно обработать этот двоичный файл, позвоните ei_decode_version должно быть раньше ei_decode_string

int ei_decode_version (const char * buf, int * index, int * version)

Эта функция декодирует магическое число версии для двоичного файла erlang.
термин формат. Это должен быть первый токен в двоичном члене.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]