gpt4 book ai didi

c++ - 在erlang和c++之间发送数据

转载 作者:太空狗 更新时间:2023-10-29 23:13:55 27 4
gpt4 key购买 nike

我正在使用 tcp 连接将数据发送到 C++ 服务器。我读过 ei 库,当给定一个二进制文件时,它有一堆函数可以从二进制文件中获取解码值。例如,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”,因为我告诉它从二进制文件中解码为字符串。确保我在生成的缓冲区中有足够的空间。

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;

我无法解码我发送的字符串。!我错过了什么吗?如果这不是正确的方法,我如何发送数据并在服务器端对其进行解码。

谢谢你的帮助!

最佳答案

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

此处二进制文件中的第一项不是作为小整数的字符串,而是版本号 (131),如 External Term Format 中所述。 .之后是术语,每个术语都以标签为前缀,然后是相应的数据。在这种情况下,标记 107 STRING_EXT,长度为两个字节 (13),然后是 13 个 8 位整数,第一个 83 对应于字母“S”(ascii 中的 83)。

要正确处理此二进制文件,必须在 ei_decode_string 之前调用 ei_decode_version

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

This function decodes the version magic number for the erlang binary term format. It must be the first token in a binary term.

关于c++ - 在erlang和c++之间发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36729574/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com