通过TCP Erlang接收错误数据
我正试图通过TCP套接字接收一些数据。当我运行下面的代码时,我得到了输出:localhost ^V^A^@,我知道如果使用二进制文件发送数据,您需要转换数据,但是由于我发送了一个列表,我认为它会收到相同的结果?为什么主机字符串显示正确,而其他数据显示不正确 任何帮助都将不胜感激,谢谢通过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
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]
,在服务器中,像这样匹配