erlang 聊天室
来源:互联网 发布:java就是业务逻辑吗 编辑:程序博客网 时间:2024/05/21 09:19
服务端
-module(chatServer).-export([start/1]).start(Port) -> {ok, Listen} = gen_tcp:listen(Port, [binary, {active, true}, {packet, 4}, {reuseaddr, true}]), spawn(fun() -> newConnect(Listen) end), register(server, spawn(fun() -> loop(dict:new()) end)).newConnect(Listen) -> {ok, Socket} = gen_tcp:accept(Listen), server ! {addClient, Socket}, spawn(fun() -> newConnect(Listen) end), listenClient(Socket).listenClient(Socket) -> receive {tcp, Socket, Bin} -> server ! {sendClient, Socket, Bin} end, listenClient(Socket).loop(Dict) -> receive {sendClient, _Socket, Bin} -> dict:map( fun(Key, _Value) -> gen_tcp:send(Key, Bin) end, Dict ), loop(Dict); {addClient, Socket} -> NewDict = dict:store(Socket, 0, Dict), loop(NewDict) end.客户端
-module(chatClient).-export([start/2, sendMsg/1]).start(Ip, Port) -> register( client, spawn(fun() -> {ok, Socket} = gen_tcp:connect(Ip, Port, [binary, {packet, 4}]), loop(Socket) end )).%% 这里面的代码需要放到一个进程下,不然无法通信loop(Socket) -> receive {sendMessage, Str} -> gen_tcp:send(Socket, term_to_binary(Str)), loop(Socket); {tcp, Socket, Bin} -> Value = binary_to_term(Bin), io:format("receive ~p~n", [Value]), loop(Socket); {tcp_closed, Socket} -> io:format("socket close~n") end, loop(Socket).sendMsg(Str) -> client ! {sendMessage, Str}.
主要还是在进程创建和通信方面需要多注意下
0 0
- erlang 聊天室
- Erlang TCP编程:聊天室
- Erlang 聊天室程序( 一)
- Erlang 聊天室程序( 一)
- Erlang 聊天室程序
- 【Erlang】基于gen_tcp的聊天室
- Erlang 聊天室程序(二) 客户端的退出
- Erlang 聊天室程序(五) 设置客户端信息
- Erlang 聊天室程序(七) 获取在线用户
- erlang gen_tcp 聊天室(node节点)
- erlang gen_tcp 聊天室(holl节点)
- erlang gen_tcp 聊天室(chat节点)
- Erlang 聊天室程序(三) 数据交换格式---json的decode
- Erlang 聊天室程序(四) 数据交换格式---json的encode
- Erlang 聊天室程序(六) 设置客户端信息2
- Erlang 聊天室程序(八) 主题房间---supervisor 的使用
- erlang简易聊天室基于OTP(gen_server,gen_fsm)
- 聊天室
- 单机用户下修改root密码及grub加密
- $.ajax返回的JSON无法执行success的解决方法
- Lucene搜索引擎入门写法
- mysql语句-select...into outfile
- Unity3D高频面试问题
- erlang 聊天室
- 《Essential Linux Device Drivers》中文版第1章
- php shell方式执行
- haoservice提供天气预报接口
- CSDN first - For ZYBO
- SQL Server 的日志文件
- Jquery ajax方法解析返回的json数据
- Java Swing界面编程(31)---菜单栏:JMenu
- 【cocos2dx学习笔记】技能冷却的实现方法