Erlang中使用OTP库实现简单的TCP服务器和客户端通信

作者:佚名 上传时间:2023-04-30 运行软件:Erlang 软件版本:Erlang/OTP 23 版权申诉

本示例代码展示了如何使用Erlang的OTP库实现一个简单的TCP服务器和客户端通信。通过基于OTP框架的gen_server/gen_tcp模块,可以方便地实现可靠的、并发的网络编程。

%% TCP Server
-module(tcp_server).
-behaviour(gen_server).

-export([start_link/0, init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
-export([accept/2, handle_client/2]).

start_link() ->
    gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).

init([]) ->
    {ok, Listen} = gen_tcp:listen(8080, [binary, {packet, 0}, {reuseaddr, true}, {active, false}]),
    listen(Listen, []).

handle_call(_Request, _From, State) ->
    {reply, ok, State}.

handle_cast(_Msg, State) ->
    {noreply, State}.

handle_info({tcp, Socket, Data}, State = {listen, Listen}) ->
    spawn(fun () -> handle_client(Socket, Data) end),
    {noreply, State};
handle_info(timeout, State) ->
    {noreply, State};
handle_info(_, State) ->
    {noreply, State}.

terminate(_Reason, _State) ->
    ok.

code_change(_OldVsn, State, _Extra) ->
    {ok, State}.

listen(Listen, Clients) ->
    case gen_tcp:accept(Listen) of
        {ok, Socket} ->
            NewClients = [Socket | Clients],
            gen_tcp:controlling_process(Socket, self()),
            listen(Listen, NewClients);
        {error, _} ->
            ok
    end.

handle_client(Socket, Data) ->
    io:format("Received data: ~p~n", [Data]),
    gen_tcp:send(Socket, Data),
    gen_tcp:close(Socket).

%% TCP Client
-module(tcp_client).

-export([main/1]).

main([Host, Port]) ->
    {ok, Socket} = gen_tcp:connect(Host, Port, [binary, {packet, 0}, {active, false}]),
    gen_tcp:send(Socket, "Hello, world!"),
    {ok, Received} = gen_tcp:recv(Socket, 0),
    io:format("Received data: ~p~n", [Received]),
    gen_tcp:close(Socket).

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com

用户评论
相关推荐
Erlang使用OTP实现简单TCP服务器客户端通信
本示例代码展示了如何使用Erlang的OTP库实现一个简单的TCP服务器和客户端通信。通过基于OTP框架的gen_server/gen_tcp模块,可以方便地实现可靠的、并发的网络编程。%% TCP
Erlang/OTP 23
Erlang
2023-04-30 18:44
使用Erlang实现TCP服务器客户端通信
本示例代码展示了如何使用Erlang编写TCP服务器和客户端间的通信。该示例代码通过创建socket套接字实现通信,包括发送和接收数据。在该示例代码中,服务器会监听客户端的请求并能够接受多个客户端的连
Erlang/OTP 23.3
Erlang
2023-03-25 20:23
使用Erlang实现TCP服务器-客户端通信
本示例展示了如何在Erlang中使用gen_tcp模块实现TCP服务器-客户端通信。代码分别实现了服务器和客户端的监听和发送。服务器端:-module(tcp_server).-export(
Erlang/OTP 23
Erlang
2023-05-27 02:29
ErlangOTP简介
主要介绍了Erlang中的OTP简介,OTP包含了一组库和实现方式,可以构建大规模、容错和分布式的应用程序,包含了许多强大的工具,能够实现H248,SNMP等多种协议,需要的朋友可以参考下
其他
0B
2020-10-28 01:50
使用Erlang编写TCP服务器客户端通信
这个示例代码演示了如何使用Erlang编写一个简单的TCP服务器和客户端程序,以及如何在它们之间进行双向通信。实现方式使用Erlang的gen_tcp模块来创建和管理TCP连接,并使用Erlang的消
Erlang/OTP 22
Erlang/OTP
2023-04-25 03:06
erlang AND OTP
erlangANDOTP.pdf
PDF
0B
2020-01-09 17:14
使用go实现简单TCP服务器客户端通信
本示例展示了如何使用go语言实现简单的TCP服务器和客户端通信。服务器和客户端通过TCP协议进行双向通信,实现了基础的数据传输和收发功能。//服务器端func main() { //创建监
go 1.14
Go语言
2023-04-30 18:24
使用Lua实现简单TCP服务器客户端通信
该示例代码展示了如何使用Lua语言实现一个基于TCP协议的简单服务器和客户端通信功能。通过该示例代码,可以了解到如何使用Lua中的socket库来实现网络通信功能,以及如何通过对Socket对象进行操
Lua 5.1+
Lua语言
2023-05-23 07:58
使用Scheme实现简单TCP服务器客户端通信
该示例代码展示了如何使用Scheme编写一个简单的TCP服务器并与客户端通信。首先创建一个基础的TCP服务器,监听一个特定端口。当有客户端连接到服务器时,服务器会接收并处理客户端发送的消息,然后将其回
GNU Guile 2.0.11
GNU Guile
2023-05-23 14:10
使用Python实现简单TCP服务器客户端通信
本示例展示了如何基于Python实现一个简单的TCP服务器和客户端通信。TCP协议通过连接建立双向通信信道,因此可实现客户端与服务器之间的双向数据传输。在本示例中,服务器将监听指定的端口号,并在收到客
Python 3.7.9
PyCharm 2020.1.3
2023-05-18 08:30