Erlang TCP编程Demo

本文介绍了使用Erlang进行TCP编程的一个简单示例。通过Erlang的gen_tcp模块创建服务器,当客户端连接关闭时,服务器能接收到{error, closed}的通知。同时展示了Java客户端如何与Erlang服务器交互。" 132704932,19687575,MATLAB实现语音基频检测,"['语音识别', 'MATLAB', '信号处理']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天学习了一下Erlang TCP编程,做了一个小Demo. 感觉比较好用的功能是:每当客户端Socket关闭的时候,会向服务器发送一条{error, closed}的消息,反之亦然。好像Java没有这个功能。

[code="erlang"]
-module(tcp_test).
-export([start_server/0, client/0, accept/1]).

start_server()->
    {ok, ListenSocket}=gen_tcp:listen(9999,[binary,{active,false}]),
    accept(ListenSocket).
    
accept(ListenSocket)->
    {ok,Socket} = gen_tcp:accept(ListenSocket),
    spawn(?MODULE, accept,[ListenSocket]),
    process_request(Socket).
    
process_request(Socket)->
    case gen_tcp:recv(Socket,0,5000) of
        {ok,Binary}->
            io:format("received request message ~p~n", [Binary]),
            gen_tcp:send(Socket, "process successful"),
            process_request(Socket);
        {error, closed}->
            io:format("socket close ~n");
        _Req->
            io:format("receive ~p~n", [_Req])
    end.
    
client()->
    {ok,Socket}=gen_tcp:connect({127,0,0,1},9999,[binary,{packet,0},{active,false}]),
    gen_tcp:send(Socket, "erlang client sending message"),
    case gen_tcp:recv(Socket,0,5000) of
        {ok,Binary}->
            io:format("result: ~p~n", [Binary]);
        _Req->
            io:format("unknow receive ~p~n", [_Req])
    end,
    ok = gen_tcp:close(Socket).

[/code]


[code="java"]

import java.net.Socket;

public class Client{

    public static void main(String args[]) throws Exception{
        Socket socket = new Socket("127.0.0.1", 9999);
        socket.getOutputStream().write("java client send message".getBytes());
        byte[] b = new byte[1024];
        int length = socket.getInputStream().read(b);
        System.out.println(new String(b,0, length));
        socket.close();
    }
}
[/code]

[b]运行结果如下:
Server端结果:[/b]

D:\temp\socket>erl
Eshell V5.8.4  (abort with ^G)
1> c(tcp_test).
{ok,tcp_test}
2> tcp_test:start_server().
received request message <<"erlang client sending message">>
socket close
ok
3> received request message <<"java client send message">>
3> socket close
3> inet:i().
Port Module   Recv Sent Owner    Local Address Foreign Address State
2068 inet_tcp 0    0    <0.30.0> *:9999        *:*             ACCEPTING
2069 inet_tcp 29   18   <0.30.0>                               CONNECTED
Port Module Recv Sent Owner Local Address Foreign Address State
ok
4>
[b]Erlang client 端结果:[/b]
D:\temp\socket>erl
Eshell V5.8.4  (abort with ^G)
1> tcp_test:client().
result: <<"process successful">>
ok
2>
[b]Java client 端结果:[/b]
D:\temp\socket>javac Client.java

D:\temp\socket>java Client
process successful

D:\temp\socket>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值