Używam połączenia TCP do wysyłania danych do serwera C++. Czytałem o bibliotece ei, która po podaniu binarnej ma garść funkcji, aby uzyskać dekodowaną wartość z binarnego. Egs, ei_decode_string, ei_decode_long i inne.wysyłanie danych między erlang i C++
Próbuję wykonać te proste czynności:
1. Utwórz gniazdo i połącz się z nim.
{ok, Socket} = gen_tcp:connect({127,0,0,1}, 8986, []).
2. Użyj polecenia gen_tcp: send/2, aby wysłać dane.
gen_tcp:send(Socket, term_to_binary("Stackoverflow")).
Dlatego wysyłam do serwera format binarny ciągu znaków.
mojego serwera, kod C++, pobiera dane i staram się dostać cokolwiek klient wysyła mnie na gnieździe przy użyciu ei_decode_string jak:
Najlepiej, gdy dekodowany powinienem wrócić ciąg „stackoverflow” Od Powiedziałem, żeby dekodować_as_string z pliku binarnego. Upewniłem się, że mam wystarczająco dużo miejsca w wynikowym buforze.
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;
Nie mogę rozszyfrować ciągu, który wysłałem.! Czy czegoś brakuje? Jak mogę wysyłać dane i dekodować je po stronie serwera, jeśli nie jest to właściwe podejście.
Dziękuję za pomoc!
zorientował się, ale to tylko tweek. Widzę, że po stronie serwera otrzymuję dodatkowy znak zapytania (?) I jeśli przekażę bufor pomijając tego charectera, ei_decode_string działa dobrze. ale nie jestem pewien, dlaczego otrzymuję ten dodatkowy znak zapytania (?). – listen
Przypuszczam, że ten sam powód, jak 'binary_to_list (term_to_binary (" Stackoverflow "))' nie działa zgodnie z oczekiwaniami – Lol4t0
Aby uzyskać poprawną, jasną odpowiedź: jeśli chcesz przekonwertować ciąg znaków na binarny reprezentujący znaki tego ciągu, jeden powinien użyć ['list_to_binary/1'] (http://erlang.org/doc/man/erlang.html#list_to_binary-1). 'term_to_binary' powinno być używane, gdy adresat oczekuje danych w formacie zewnętrznym Erlanga (http://erlang.org/doc/apps/erts/erl_ext_dist.html). –