直接上代码吧!
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-master`可能包含源代码文件,如`.erl`文件,用于实现TCP客户端功能。 - 可能还有测试用例文件`.eunit`或`.ct`,用于验证和测试客户端的正确性。 - 配置文件可能定义了连接池大小、超时设置等参数。...
在IT领域,Erlang是一种面向并发的编程语言,它被广泛用于构建高可用性和容错性的系统,尤其是...通过阅读和分析源代码,我们可以深入理解Erlang的并发特性、gen_tcp的使用方法,以及如何构建分布式、实时的聊天应用。
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...
#### 三、TCP客户端实现 - **基本需求**:实现一个简单的TCP客户端,可以连接至Web服务器并显示服务器返回的数据。 - **实现过程**: 1. **创建客户端模块**:定义一个模块`simple_client`。 2. **使用`gen_tcp`库...
4. **实时通信**:为了实现实时交互,可以使用Erlang的TCP/UDP套接字接口进行网络通信,或者利用Erlang的Websocket库,如`gun`或`websocket_client_server`。 5. **rabbitMQ灵感**:既然项目参考了rabbitMQ,那么...
Erlang是一种面向并发的、基于actor模型的编程语言,特别适合构建高可用性和高性能的分布式系统。在Erlang的生态系统中,esockd是一个非常重要的库,它提供了对socket编程的高级抽象,帮助开发者更高效地处理网络...
<server host="192.168.3.242" port="5222" type="tcp"></server> <!-- 负载配置 --> <users maxnumber="12000" interarrival="0.1" unit="second"></users> <!-- XMPP 参数配置 --> <!-- 其他参数...
5. 客户端连接:`tcp_client`可能包含`gen_tcp:connect/3`来建立到服务器的连接,`gen_tcp:send/2`发送数据,以及`gen_tcp:recv/2`接收服务器的响应。 通过理解和分析这些源码,你可以学习到Erlang中如何编写TCP...
在"rcp-client-master"这个项目中,我们可以预见到一个使用Erlang实现的RCP客户端示例,可能包含了客户端的接口设计、请求的序列化与反序列化逻辑、错误处理策略以及与Erlang OTP框架的集成。通过研究该项目的源代码...
Erlang是一种流行的高级编程语言,特别适合构建并发系统,例如分布式系统、电信系统等。在Erlang中,使用socket进行网络编程是非常重要的基础技能,它可以让我们创建能够处理网络通信的服务器和客户端应用。本文将...
- **erlang**:Erlang是一种面向并发的、函数式编程语言,常用于构建高可用性、分布式系统,尤其适合处理大量并发连接和实时性需求。 - **HTTPErlang**:可能是指Erlang中的HTTP相关库或工具,强调了这个客户端是用...
例如,对于Java,Thrift会生成`Iface`、`Processor`、`Client`和`Server`接口及类,开发者只需实现`Iface`接口。 5. 客户端与服务器通信:客户端使用生成的客户端代码来创建服务代理,通过代理调用服务方法。服务器...
Erlang以其并发能力、容错性和轻量级进程模型而闻名,这使得它在构建分布式系统和网络应用时具有独特的优势。`ckle锁`,或Shackle,利用了这些特性,提供了一种灵活且高效的解决方案来处理TCP和UDP连接。 **Erlang...
Erlang是一种并发性极强的函数式编程语言,常用于构建分布式系统。 博文链接提供的内容可能是一个关于Erlang中Socket编程的实例,其中遇到了一些错误。首先,我们来看一下`chat_client.erl`,这很可能是客户端的...
RabbitMQ是一个开源的消息代理和队列服务器,广泛用于分布式系统中的消息传递。在这个系统中,客户端和服务器之间的通信遵循Advanced Message Queuing Protocol (AMQP)。以下是对标题和描述中涉及的知识点的详细说明...
7. **Erlang**: Erlang 是一个函数式编程语言,尤其擅长构建分布式、容错和并发系统。Elixir 就是在 Erlang VM(BEAM)上运行,利用了 Erlang 的并发特性和稳定性。 8. **elixir-library**: 在这里,`elixir-...
- `listeners`: 配置监听端口和协议,如`tcp_listener`用于TCP连接。 - `default_user`和`default_password`: 设置默认的管理用户和密码。 五、RabbitMQ管理界面 RabbitMQ提供了一个Web管理界面,便于监控和管理...
在实际应用中,Thrift可以用于构建分布式系统中的微服务、实现跨语言的RPC(Remote Procedure Call)通信,或者作为数据交换的中间层。Thrift的灵活性和高性能使其成为构建大规模、多语言应用的理想选择。 为了开始...
## 三、通信协议 Thrift使用自己的二进制协议,这种协议高效且紧凑,适合大规模数据传输。它支持TCP、HTTP、HTTPS等多种传输层协议,可以根据实际需求选择合适的通信方式。 ## 四、服务端实现 在生成的服务端代码...
RabbitMQ 是一种广泛使用的开源消息队列系统,基于 Advanced Message Queuing Protocol (AMQP) 实现,它允许应用程序通过异步通信来解耦和分布式任务。面试中,RabbitMQ 的核心概念和技术细节通常是考察的重点。 1....