Я работал, когда оба конца связи были основаны на erlang, и документация дает понять, что использование {package, N} добавляет заголовок с размер сообщения и gen_tcp: recv/2 удаляет заголовок при приеме. Это довольно просто. Тем не менее, если принимающая программа не основана на erlang, а скорее на C++, я просто разбираю заголовок и знаю размер сообщения, чтобы я мог выделить этот объем памяти. Я до сих пор,, используя {пакет, N} в gen_tcp и как получать данные в программе C++
//Receive a message from client
while((read_size = recv(sock , client_message , 2000 , 0)) > 0)
{
//end of string marker
client_message[read_size] = '\0';
write(sock , client_message , strlen(client_message));
//clear the message buffer
memset(client_message, 0, 2000);
}
Но не уверен, как получить этот заголовок, а затем использовать ei_module, чтобы получить реальное значение декодированного.
Вот как я декодировал сообщение.
code here Это было, когда клиент подключился к опции {пакет, 0}, чтобы не было заголовка с размером. Чтобы разрешить динамическое распределение памяти, я начинаю использовать {пакет, N}, но не знаю, как читать этот заголовок? Заранее спасибо.