Sto utilizzando una connessione TCP per inviare dati a un server C++. Ho letto della libreria ei che, quando viene data una stringa, ha un sacco di funzioni per ottenere il valore decodificato dal binario. Egs, ei_decode_string, ei_decode_long e altri.invio di dati tra erlang e C++
Sto cercando di fare queste semplici cose:
1. creare un socket e connettersi ad esso.
{ok, Socket} = gen_tcp:connect({127,0,0,1}, 8986, []).
2. Usa gen_tcp: invia/2 per inviare dati.
gen_tcp:send(Socket, term_to_binary("Stackoverflow")).
Pertanto, sto inviando un formato binario di una stringa al server.
mio server, il codice C++, ottiene i dati e sto cercando di ottenere tutto ciò che il cliente mi manda sopra la presa con ei_decode_string come:
Idealmente, quando decodificato dovrei tornare la stringa, "StackOverflow" dal L'ho detto a decode_as_string dal binario. Mi sono assicurato di avere abbastanza spazio nel buffer risultante.
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;
Non riesco a decodificare la stringa che ho inviato.! Mi sto perdendo qualcosa? Come posso inviare dati e decodificarli dal lato server, se questo non è l'approccio giusto.
Grazie per l'aiuto!
capito, ma questo è solo un tweek. Posso vedere che sul lato server, sto ricevendo un punto interrogativo extra (?) E se passo il buffer saltando quel carattere, ei_decode_string funziona bene. ma non sono sicuro, perché sto ricevendo quel punto interrogativo in più (?). – listen
Suppongo che la stessa ragione di 'binary_to_list (term_to_binary (" Stackoverflow "))' non funzioni come previsto – Lol4t0
Per una risposta corretta, chiara: se si vuole convertire una stringa in un file binario che rappresenta i caratteri di quella stringa, uno dovrebbe usare ['list_to_binary/1'] (http://erlang.org/doc/man/erlang.html#list_to_binary-1). 'term_to_binary' dovrebbe essere usato quando il destinatario si aspetta dati in [formato di termine esterno Erlang] (http://erlang.org/doc/apps/erts/erl_ext_dist.html). –