1

クライアントとサーバーがあり、クライアントを使用して のような文字列を送信する"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.
4

3 に答える 3

5

理由は次のとおりです。

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

具体的にはbinary、オプションで渡されたアトム。代わりに合格listすると、通常の文字列が得られます。のドキュメントを参照してくださいgen_tcp:listen/2

次のコードが機能しなかった理由:

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

それlists:flatten/1は実際には変わらない Stringですか; 引数をフラット化した結果である新しいリストを返します。これはうまくいったでしょう:

lists:flatten(io_lib:format("~p", [StringIn])).
于 2013-03-20T10:53:46.513 に答える
3

関数を使用できます-erlangモジュールのbinary_to_list。

  Eshell V5.9.1  (abort with ^G)

1> B = <<"Hello">>.
<<"Hello">>
2> erlang:binary_to_list(B).
"Hello"
3> 
于 2013-03-20T01:05:54.553 に答える
2

io:formatまたはを使用してバイナリを出力したいだけの場合は、フォーマット指定子io_lib:formatを使用できます。~s

1> MyBinary = <<"Hello">>.
<<"Hello">>
2> io:format("MyBinary is '~s'~n", [MyBinary]).
MyBinary is 'Hello'
ok
于 2013-03-20T11:19:34.903 に答える