我正在使用tcp連接將數據發送到C++服務器。我已經閱讀過關於ei庫,當給出一個二進制文件時,它有一堆函數可以從二進制文件中獲得解碼值。 Egs,ei_decode_string,ei_decode_long等。在erlang和C++之間發送數據
我想要做這些簡單的事情:
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像插座:
理想的情況下,解碼時,我應該找回字符串,「#1」,因爲我告訴它來自binary的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;
我無法解碼我發送的字符串。我錯過了什麼嗎?如果這不是正確的方法,我如何在服務器端發送數據並對其進行解碼。
謝謝你的幫助!
想通了,但這只是一個tweek。我可以看到,在服務器端,我收到一個額外的問號(?),如果我通過緩衝區跳過該結構,ei_decode_string工作正常。但不知道,爲什麼我得到額外的問號(?)。 – listen
我想'binary_to_list(term_to_binary(「Stackoverflow」))'不能正常工作 – Lol4t0
爲了正確,清晰的答案:如果想要將字符串轉換爲表示該字符串的字符的二進制文件,應該使用['list_to_binary/1'](http://erlang.org/doc/man/erlang.html#list_to_binary-1)。當收件人需要[Erlang外部術語格式](http://erlang.org/doc/apps/erts/erl_ext_dist.html)中的數據時,應使用'term_to_binary'。 –