`
willvvv
  • 浏览: 334201 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

erlang分布式入门(三)-TCP Server-Client

阅读更多

直接上代码吧!

 

1.服务端:tcp_server.erl

-module(tcp_server).
-author('Jesse E.I. Farmer <jesse@20bits.com>').
-export([listen/1]).

-define(TCP_OPTIONS, [binary, {packet, 0}, {active, false}, {reuseaddr, true}]).

% Call echo:listen(Port) to start the service.
listen(Port) ->
    {ok, LSocket} = gen_tcp:listen(Port, ?TCP_OPTIONS),
    accept(LSocket).

% Wait for incoming connections and spawn the echo loop when we get one.
accept(LSocket) ->
    {ok, Socket} = gen_tcp:accept(LSocket),
    spawn(fun() -> loop(Socket) end),
    accept(LSocket).

% Echo back whatever data we receive on Socket.
loop(Socket) ->
    case gen_tcp:recv(Socket, 0) of
        {ok, Data} ->
            io:format("recv ~p~n", [Data]),
            gen_tcp:send(Socket, Data),
            loop(Socket);
        {error, closed} ->
            ok
    end.

 

2.客户端:tcp_client.erl

-module(tcp_client).
-export([start/1, send_data/2, close/1]).

start(Port) ->
        {ok, Socket} = gen_tcp:connect("127.0.0.1", Port, [binary, {packet, raw}, {active, true}, {reuseaddr, true}]),
        Socket.


send_data(Socket, Data) when is_list(Data) orelse is_binary(Data) ->
        gen_tcp:send(Socket, Data),
        receive
                {tcp, Socket, Bin} ->
                        io:format("recv ~p~n", [Bin]);
                {tcp_closed, Socket} ->
                        io:format("remote server closed!~n")
        end.

close(Socket) when is_port(Socket) ->
        gen_tcp:close(Socket).

 

3.测试运行,需要开启两个终端,一个运行tcp_server,一个运行tcp_client,先运行tcp_server

[root@centos-183 erlang-learn]# erl
Erlang R15B (erts-5.9) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9  (abort with ^G)
1> c(tcp_server).
{ok,tcp_server}
2> tcp_server:listen(8080).
recv <<"abc">>

 

在tcp_client端

[root@centos-183 erlang-learn]# erl
Erlang R15B (erts-5.9) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9  (abort with ^G)
1> c(tcp_client).
{ok,tcp_client}
2> Socket=tcp_client:start(8080).
#Port<0.2242>
3> tcp_client:send_data(Socket,<<"abc">>). 
recv <<"abc">>
ok
4> 
 

 

  • 大小: 31.8 KB
分享到:
评论

相关推荐

    tcp_client:一个Erlang TCP客户端连接管理器

    - `tcp_client-master`可能包含源代码文件,如`.erl`文件,用于实现TCP客户端功能。 - 可能还有测试用例文件`.eunit`或`.ct`,用于验证和测试客户端的正确性。 - 配置文件可能定义了连接池大小、超时设置等参数。...

    基于Erlang的gen_tcp聊天室代码,功能完整

    在IT领域,Erlang是一种面向并发的编程语言,它被广泛用于构建高可用性和容错性的系统,尤其是...通过阅读和分析源代码,我们可以深入理解Erlang的并发特性、gen_tcp的使用方法,以及如何构建分布式、实时的聊天应用。

    RabbitMQ包以及依赖包

    sudo rpm -ivh erlang-23.3.4.10-1.el7.x86_64.rpm rabbitmq-server-3.10.0-1.el7.noarch.rpm socat-1.7.3.2-5.el7.lux.x86_64.rpm ``` 安装完成后,需要启动RabbitMQ服务,并确保其在开机时自动启动: ```bash sudo...

    erlang学习1.pdf

    #### 三、TCP客户端实现 - **基本需求**:实现一个简单的TCP客户端,可以连接至Web服务器并显示服务器返回的数据。 - **实现过程**: 1. **创建客户端模块**:定义一个模块`simple_client`。 2. **使用`gen_tcp`库...

    erlang 聊天室源码

    4. **实时通信**:为了实现实时交互,可以使用Erlang的TCP/UDP套接字接口进行网络通信,或者利用Erlang的Websocket库,如`gun`或`websocket_client_server`。 5. **rabbitMQ灵感**:既然项目参考了rabbitMQ,那么...

    erlang高性能网络库esockd的编译和使用(三)

    Erlang是一种面向并发的、基于actor模型的编程语言,特别适合构建高可用性和高性能的分布式系统。在Erlang的生态系统中,esockd是一个非常重要的库,它提供了对socket编程的高级抽象,帮助开发者更高效地处理网络...

    Tsung负载测试tigase

    &lt;server host="192.168.3.242" port="5222" type="tcp"&gt;&lt;/server&gt; &lt;!-- 负载配置 --&gt; &lt;users maxnumber="12000" interarrival="0.1" unit="second"&gt;&lt;/users&gt; &lt;!-- XMPP 参数配置 --&gt; &lt;!-- 其他参数...

    自己写一个tcp 通用服务器

    5. 客户端连接:`tcp_client`可能包含`gen_tcp:connect/3`来建立到服务器的连接,`gen_tcp:send/2`发送数据,以及`gen_tcp:recv/2`接收服务器的响应。 通过理解和分析这些源码,你可以学习到Erlang中如何编写TCP...

    rcp-client:rcp-客户端-内部

    在"rcp-client-master"这个项目中,我们可以预见到一个使用Erlang实现的RCP客户端示例,可能包含了客户端的接口设计、请求的序列化与反序列化逻辑、错误处理策略以及与Erlang OTP框架的集成。通过研究该项目的源代码...

    Erlang中的socket编程简单例子

    Erlang是一种流行的高级编程语言,特别适合构建并发系统,例如分布式系统、电信系统等。在Erlang中,使用socket进行网络编程是非常重要的基础技能,它可以让我们创建能够处理网络通信的服务器和客户端应用。本文将...

    hackney:Erlang中的简单HTTP客户端

    - **erlang**:Erlang是一种面向并发的、函数式编程语言,常用于构建高可用性、分布式系统,尤其适合处理大量并发连接和实时性需求。 - **HTTPErlang**:可能是指Erlang中的HTTP相关库或工具,强调了这个客户端是用...

    thrift入门教程+代码

    例如,对于Java,Thrift会生成`Iface`、`Processor`、`Client`和`Server`接口及类,开发者只需实现`Iface`接口。 5. 客户端与服务器通信:客户端使用生成的客户端代码来创建服务代理,通过代理调用服务方法。服务器...

    ckle锁:高性能Erlang网络客户端框架

    Erlang以其并发能力、容错性和轻量级进程模型而闻名,这使得它在构建分布式系统和网络应用时具有独特的优势。`ckle锁`,或Shackle,利用了这些特性,提供了一种灵活且高效的解决方案来处理TCP和UDP连接。 **Erlang...

    修正Socket Base Distribution一节实例代码的Bug

    Erlang是一种并发性极强的函数式编程语言,常用于构建分布式系统。 博文链接提供的内容可能是一个关于Erlang中Socket编程的实例,其中遇到了一些错误。首先,我们来看一下`chat_client.erl`,这很可能是客户端的...

    RabbitMQ系统客户端连接到RabbitMQ服务端消息通信过程1

    RabbitMQ是一个开源的消息代理和队列服务器,广泛用于分布式系统中的消息传递。在这个系统中,客户端和服务器之间的通信遵循Advanced Message Queuing Protocol (AMQP)。以下是对标题和描述中涉及的知识点的详细说明...

    riemannx:用于elixir的riemann客户端(支持TCPUDPTLS)

    7. **Erlang**: Erlang 是一个函数式编程语言,尤其擅长构建分布式、容错和并发系统。Elixir 就是在 Erlang VM(BEAM)上运行,利用了 Erlang 的并发特性和稳定性。 8. **elixir-library**: 在这里,`elixir-...

    arm_rabbitmq.zip

    - `listeners`: 配置监听端口和协议,如`tcp_listener`用于TCP连接。 - `default_user`和`default_password`: 设置默认的管理用户和密码。 五、RabbitMQ管理界面 RabbitMQ提供了一个Web管理界面,便于监控和管理...

    thrift基础文档

    在实际应用中,Thrift可以用于构建分布式系统中的微服务、实现跨语言的RPC(Remote Procedure Call)通信,或者作为数据交换的中间层。Thrift的灵活性和高性能使其成为构建大规模、多语言应用的理想选择。 为了开始...

    thrift源码+DEMO+简单教程

    ## 三、通信协议 Thrift使用自己的二进制协议,这种协议高效且紧凑,适合大规模数据传输。它支持TCP、HTTP、HTTPS等多种传输层协议,可以根据实际需求选择合适的通信方式。 ## 四、服务端实现 在生成的服务端代码...

    RabbitMQ消息中间件面试专题含参考答案.docx

    RabbitMQ 是一种广泛使用的开源消息队列系统,基于 Advanced Message Queuing Protocol (AMQP) 实现,它允许应用程序通过异步通信来解耦和分布式任务。面试中,RabbitMQ 的核心概念和技术细节通常是考察的重点。 1....

Global site tag (gtag.js) - Google Analytics