Erlang之乙個簡單的TCP伺服器

2021-09-24 10:00:19 字數 2982 閱讀 2296

簡單tcp伺服器**:

-module(my_socket_server).

-export([start/0,loop/1]).

start() ->

= gen_tcp:listen(2345, [binary, ,%自定義打包規則,生成乙個監聽2345埠的socket

,]),

= gen_tcp:accept(listen),%生存乙個新的socket

gen_tcp:close(listen),%把該監聽關閉,不再生成新的socket

loop(socket).

loop(socket) ->

receive

->

io:format("server received binary = ~p~n",[bin]),

str = binary_to_term(bin),%解碼

io:format("server (unpacked) ~p~n",[str]),

reply = lib_misc:string2value(str),

io:format('server replying = ~p~n',[reply]),

gen_tcp:send(socket, term_to_binary(reply)),%編碼

loop(socket);

->

io:format("server socket close~n")

end.

順序伺服器:

-module(my_socket_server2).

-compile(export_all).

start() ->

= gen_tcp:listen(2345, [binary, ,%自定義打包規則,生成乙個監聽2345埠的socket

,]),

seq_loop(listen).

seq_loop(listen) ->

= gen_tcp:accept(listen),

loop(socket),

seq_loop(listen).

loop(socket) ->

receive

->

io:format("server received binary = ~p~n",[bin]),

str = binary_to_term(bin),%解碼

io:format("server (unpacked) ~p~n",[str]),

reply = lib_misc:string2value(str),

io:format('server replying = ~p~n',[reply]),

gen_tcp:send(socket, term_to_binary(reply)),%編碼

loop(socket);

->

io:format("server socket close~n")

end.

並行伺服器:

-module(my_socket_server3).

-compile(export_all).

start() ->

= gen_tcp:listen(2345, [binary, ,%自定義打包規則,生成乙個監聽2345埠的socket

,]),

spawn(fun() -> par_connect(listen) end).

par_connect(listen) ->

= gen_tcp:accept(listen),

spawn(fun() -> par_connect(listen) end),

loop(socket).

loop(socket) ->

receive

->

io:format("server received binary = ~p~n",[bin]),

str = binary_to_term(bin),%解碼

io:format("server (unpacked) ~p~n",[str]),

reply = lib_misc:string2value(str),

io:format('server replying = ~p~n',[reply]),

gen_tcp:send(socket, term_to_binary(reply)),%編碼

loop(socket);

->

io:format("server socket close~n")

end.

客戶端:

-module(my_socket_client).

-compile(export_all).

start(str) ->

= gen_tcp:connect('localhost', 2345,

[binary, ]),

ok = gen_tcp:send(socket, term_to_binary(str)),

receive

->

io:format("client receive binary = ~p~n",[bin]),

val = binary_to_term(bin),

io:format("client result = ~p~n",[val]),

gen_tcp:close(socket)

end.

-module(lib_misc).

-export([string2value/1]).

string2value(l) -> string2value(l, ).

string2value(, n) -> list_to_tuple(lists:reverse(n));

string2value([h|t], n) -> string2value(t, [h|n]).

Erlang 建立乙個簡單的TCP伺服器

一 建立 tcpserver.erl module tcpserver export start 0 start 建立乙個埠2345用於監聽來自客戶端的請求,是資訊表頭用4位元組表示長度,需要與客戶端一致 gen tcp listen 2345,binary,開始接受乙個請求 gen tcp acc...

erlang 自己搞定乙個簡單的MakeFile

在windows下面執行erlang的檔案 就是.beam檔案 每次都要從cmd,cd到你編譯好erlang檔案的目錄下就是有 beam 的目錄下,這樣超級麻煩。有沒有什麼辦法,在cmd中,輸入erl,直接就直接可以執行 不用再cd到你的.beam的資料夾下 你已經編譯好的的.beam檔案。首先要修...

EPICS之乙個簡單的裝置支援程式

最近看epics的開發手冊,因為手冊中是分模組介紹的,所以看了一段時間還是寫不出程式來,昨天去讓師兄給我以具體的裝置支援的例子講述了下 因為我們室主要用到的還是裝置支援 下面是構建裝置支援程式的步驟,類似於乙個hello world程式,給同樣在入門道路上的朋友乙個參考。1.像ai bi等這些型別的...