0

gen_tcp ソケットを使用する次のコードがあります。これは、{active, true}常にサイズ 5 のバイナリ コマンドを使用して受信する必要があります (例: Command = <<"hello">>)

{ok, ListenSocket} = gen_tcp:listen(5555,  [{active, true}, {mode, binary}, 
                                            {packet, 0}]),
{ok, Socket} = gen_tcp:accept(ListenSocket),    
loop().

receive() ->
    {tcp, _Socket, Message:4/binary} ->
         io:format("Success~n", []),
         loop();
    {tcp, _Socket, Other} ->
         io:format("Received: ~p~n", [Other]),
         loop()
end.

しかし、次のようにクライアントとして接続しようとすると:

1> {ok, S} = gen_tcp:connect("localhost", 5555, []).
   {ok,#Port<0.582>}
2> gen_tcp:send(S, <<"hello">>).
ok

私は受信部分に持っています:

Received: {tcp,#Port<0.585>,<<"hello">>}

私のエラーはパターンマッチングにあると思います...しかしどこで?

4

2 に答える 2

2

あなたのreceive句は正しく見えません。次のようにする必要があります。

{tcp, _Socket, <<Message:5/binary>>} ->
  ....
于 2012-08-27T13:20:52.097 に答える
0

私が理解している限り、gen_tcp:recv機能が必要です。ドキュメントから:

recv(Socket, Length) -> {ok, Packet} | {error, Reason}

コードでは、次のようになります。

...
{ok, Socket} = gen_tcp:accept(ListenSocket),
loop(Socket).

loop(Socket) -> 
    case gen_tcp:recv(Socket, 5) of
        {ok, Data} ->
            io:format("Success~n", []),
            loop(Socket);
        {error, closed} -> 
            ok
end.
于 2012-08-27T09:50:24.990 に答える