Erlang 创建一个简单的TCP服务器

版权声明:@潘广宇博客, https://blog.csdn.net/panguangyuu/article/details/89211209

一、创建 tcpServer.erl

-module(tcpServer).
-export([start/0]).

start() -> 
    
    % 创建一个端口2345用于监听来自客户端的请求,{package, 4} 是信息表头用4字节表示长度,需要与客户端一致
    {ok, Listen} = gen_tcp:listen(2345, [binary, {packet, 4}, {reuseaddr, true}, {active, true}]),

    % 开始接受一个请求
    {ok, Socket} = gen_tcp:accept(Listen),

    % 接受请求成功后,关闭监听的端口不让其他请求处理
    gen_tcp:close(Listen),
    loop(Socket).

loop(Socket) ->
    receive 
        % 接收到的来自客户端的信息
        {tcp, Socket, Bin} ->
            Receive = binary_to_list(Bin), 
            io:format("Server received Content = ~p~n", [Receive]),
            Content = Receive ++ " Hello", 
            
            % 向客户端发送信息
            gen_tcp:send(Socket, Content),
            loop(Socket);

        % 当客户端请求关闭tcp连接时
        {tcp_closed, Socket} ->
            io:format("Server socket closed~n")
    end.

二、创建 tcpClient.erl

-module(tcpClient).
-export([start/1]).

start(Str) ->
    {ok, Socket} = gen_tcp:connect("localhost", 2345, [binary, {packet, 4}]),
    ok = gen_tcp:send(Socket, Str),
    receive
        {tcp, Socket, Bin} ->
        Receive = binary_to_list(Bin),
        io:format("Client received binary = ~p~n", [Receive]),
        gen_tcp:close(Socket)
    end.

三、同时编译,并在不同窗口调用

c(tcpServer).
c(tcpClient).

A 窗口:

tcpServer:start().                      % 阻塞并监听来自客户端的请求

B窗口:

tcpClient:start("aaa").                          % 发送aaa给服务端

可见A窗口得到响应:

Server received Content = "abcd"
Server socket closed
ok

B窗口得到响应:


Client received binary = "abcd Hello"
ok

我们就完成了简单的一个TCP服务器

四、gen_tcp:连接的相关socket参数

参考该文:https://blog.csdn.net/pkutao/article/details/8572216

猜你喜欢

转载自blog.csdn.net/panguangyuu/article/details/89211209