string - Erlang:将 TCP 发送的字符串转换为正确的形式,例如<<"SomeString">> 到 "SomeString"?

标签 string tcp formatting erlang client-server

我有一个客户端和一个服务器,我使用客户端发送一个字符串,例如 "Hello"它在服务器端显示为 <<"Hello">> .有没有办法简单地转换 <<"Hello">>返回"Hello" ?我尝试使用,

String = io_lib:format("~p",[StringIn]),
            lists:flatten(String),

但这使得格式为 <<"Hello">>变成[[60,60,"\"Hello\"",62,62]] ...

顺便说下代码:

-module(ss1).
-compile(export_all).
-import(lists, [reverse/1]).

client() ->
    {ok, Socket} =  gen_tcp:connect("localhost", 2345,[binary, {packet, 4}]),
    ok = gen_tcp:send(Socket, "Hello"),
    receive
    {tcp,Socket,String} ->
        io:format("Client received = ~p~n",[String]),       
        io:format("Client result = ~p~n",[String]),
        gen_tcp:close(Socket)
    end.

server() ->
    {ok, Listen} = gen_tcp:listen(2345, [binary, {packet, 4},  {reuseaddr, true}, {active, true}]),
    {ok, Socket} = gen_tcp:accept(Listen),
    gen_tcp:close(Listen),  
    loop(Socket).

loop(Socket) ->
    receive
    {tcp,Socket,String} ->      
        io:format("Server received String = ~p~n",[String]),            
        io:format("Server replying String = ~p~n",[String]),
        gen_tcp:send(Socket, String), 
        loop(Socket);
    {tcp_closed, Socket} ->
        io:format("Server socket closed~n")
    end.

最佳答案

原因是这一行:

{ok, Listen} = gen_tcp:listen(2345, [binary, {packet, 4},  {reuseaddr, true}, {active, true}]),

具体来说,在选项中传递的原子 binary。如果您改为传递 list,您将获得一个常规字符串。查看documentation对于 gen_tcp:listen/2

以下代码不起作用的原因:

String = io_lib:format("~p",[StringIn]),
lists:flatten(String), ...

lists:flatten/1 实际上没有改变 String;它返回一个新列表,该列表是展平其参数的结果。这会奏效:

lists:flatten(io_lib:format("~p", [StringIn])).

关于string - Erlang:将 TCP 发送的字符串转换为正确的形式,例如<<"SomeString">> 到 "SomeString"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15512689/

相关文章:

java - 在字符串中搜索模式

java - getLocalAddress 在连接的套接字上返回 127.0.0.1

c# - 解释令人困惑的条件字符串格式

xslt - XSLT 中的正斜杠有什么用?

c++ - 字符指针(由 new 分配)

java - 在Java中的字符串中的所有字母之前和之后插入一个字符

linux - Linux 中非常奇怪的连接时间

c# - 尝试将数字格式化为百分比

javascript - 如何在 JavaScript 中进行 "raw"字符串搜索和替换,无正则表达式

c++ - 如何处理 Perl TCP 套接字中的消息碎片?