通过TCP Erlang接收错误数据

通过TCP Erlang接收错误数据,tcp,functional-programming,erlang,Tcp,Functional Programming,Erlang,我正试图通过TCP套接字接收一些数据。当我运行下面的代码时,我得到了输出:localhost ^V^A^@,我知道如果使用二进制文件发送数据,您需要转换数据,但是由于我发送了一个列表,我认为它会收到相同的结果?为什么主机字符串显示正确,而其他数据显示不正确 任何帮助都将不胜感激,谢谢 cell_process(Port, X, Y)-> Host = "localhost", Data = [Host,Port,X,Y], {ok, Socket} = gen_tc

我正试图通过TCP套接字接收一些数据。当我运行下面的代码时,我得到了输出:localhost ^V^A^@,我知道如果使用二进制文件发送数据,您需要转换数据,但是由于我发送了一个列表,我认为它会收到相同的结果?为什么主机字符串显示正确,而其他数据显示不正确

任何帮助都将不胜感激,谢谢

cell_process(Port, X, Y)->
    Host = "localhost",
    Data = [Host,Port,X,Y],
    {ok, Socket} = gen_tcp:connect(Host, 22, 
                                 [list, {packet, 0}]),
    ok = gen_tcp:send(Socket, Data),
    ok = gen_tcp:close(Socket).


server_process(ClientList)->
{ok, Listening_socket} = gen_tcp:listen(22, [list, {packet, 0}, 
                                        {active, false}]),
{ok, Socket} = gen_tcp:accept(Listening_socket),
    case gen_tcp:recv(Socket,0) of
        {ok,Message}->
            io:fwrite(Message);
        {error,Why}->io:fwrite(Why)
    end.

Data=[Host,Port,X,Y]
是一个iolist,而不是列表。
gen_tcp:send将数据转换为
[,]

这是iolist的文档:

iodata() = iolist() | binary()
iolist()     maybe_improper_list(char() | binary() | iolist(), binary() | [])
maybe_improper_list()     maybe_improper_list(any(), any())
byte()     0..255
char()     0..16#10ffffmaybe_improper_list(T)     maybe_improper_list(T, any())

好的,谢谢,但我还是要如何将数据转换回原始值?@user2484294调用
cell\u进程
,参数为字符串或二进制文件。你也可以在
cell\u进程中转换它们
,但这会使它成为一个更专业的函数,而且看起来应该是通用的。iolist的关键是避免平展句柄,只需将它们传递给低级函数,如
gen\u tcp:send()
。在这里,您最好发送数据
[iolist\u size(Host)、Host、Post]
,在服务器中,像这样匹配