2012年2月19日日曜日

Erlang TCP接続

通信の勉強中。CでTCPをつかった通信のサンプルコードをサイトを見ながら書いた。

そこで、Cで書いたものと(ほとんど)同じものをErlangで書いた。

動作の概要を以下にイメージ図で示す。

client が一回だけ server に接続して、送られてきたデータ(Hello)を表示するだけのもの。

以下にErlangのソースを示す。

□client

-module( sock_client ).
-compile( export_all ).

client() ->
    %% サーバ接続先
    Server = "localhost",
    %% サーバに接続
    { ok, Sock } = gen_tcp:connect( Server,
                                    12345,
                                    [ binary, { packet, 0} ] ),
    %% サーバからデータ受信
    receive
        { tcp, Sock, Bin } ->
            io:format( "Client get:~p~n", [ binary:bin_to_list( Bin ) ] )
    end,
    %% ソケットの終了
    gen_tcp:close( Sock ).



□server

-module( sock_server ).
-compile( export_all ).

server() ->
    %% TCPクライアントからの接続要求を待てる状態
    { ok, LSock } = gen_tcp:listen( 12345, [ binary, { packet, 0 } ] ),
    %% TCPクライアントからの接続要求を受け付ける
    { ok, ASock } = gen_tcp:accept( LSock ),
    %% 送信
    gen_tcp:send( ASock, "Hello" ),
    %% TCPセッション終了
    ok = gen_tcp:close( ASock ).


server を先に実行しておいてから client を実行する。
そうすると
Client get:"Hello"
と表示されるはず。

参考: