贴一下代码,例子是从别人那里直接抄来的:

-module(myudp).
-export([start/0, client/1]). %% Server
start() ->
spawn(fun() -> server(4000) end). server(Port) ->
{ok, Socket} = gen_udp:open(Port, [binary, {active, false}]),
io:format("server opened socket:~p~n", [Socket]),
loop(Socket). loop(Socket) ->
inet:setopts(Socket, [{active, once}]),
receive
{udp, Socket, Host, Port, Bin} ->
io:format("server received:~p~n", [Bin]),
gen_udp:send(Socket, Host, Port, Bin),
loop(Socket)
end. %Client code
client(N) ->
{ok, Socket} = gen_udp:open(0, [binary]),
io:format("client opened socket=~p~n", [Socket]),
ok = gen_udp:send(Socket, "localhost", 4000, N),
Value = receive
{udp, Socket, _, _, Bin} ->
io:format("client received:~p~n", [Bin])
after 2000 ->
0
end,
gen_udp:close(Socket),
Value.

尝试运行:

12> c("myudp").
{ok,myudp}
13> myudp:start().
server opened socket:#Port<0.2217>
<0.70.0>
14> myudp:client("hello").
client opened socket=#Port<0.2218>
server received:<<"hello">>
client received:<<"hello">>
ok
15> myudp:client("it's a long story").
client opened socket=#Port<0.2219>
server received:<<"it's a long story">>
client received:<<"it's a long story">>
ok
16> myudp:client(<<"nothing">>).
client opened socket=#Port<0.2220>
server received:<<"nothing">>
client received:<<"nothing">>
ok

话说,上面的直接使用引号的输入,和使用引号再使用尖括号的输入,效果是一样的。。。使用两个尖括号是什么?好像是在二进制的集合那里看到过这个符号??

Erlang练习-UDP的更多相关文章

  1. [Erlang15]“hello world”与<<”hello world”>>的具体区别是什么?

    参见 :http://learnyousomeerlang.com/buckets-of-sockets 为了加深理解,自译如下,若理解有误或更好的建议,请帮忙指出, :) Buckets of So ...

  2. Socket的UDP协议在erlang中的实现

    现在我们看看UDP协议(User Datagram Protocol,用户数据报协议).使用UDP,互联网上的机器之间可以互相发送小段的数据,叫做数据报.UDP数据报是不可靠的,这意味着如果客户端发送 ...

  3. Erlang C1500K长连接推送服务-性能

    Whatsapp已经使用Erlang在生产环境跑到96GB内存单机 3M长连接,参加:WhatsApp的Erlang世界.毕竟业务级别能达到Whatsapp那样极少,现在只有千万级,单机太多挂一台影响 ...

  4. 一次erlang 节点CPU严重波动排查

    新服务上线后观察到,CPU在10 ~ 70%间波动严重,但从每秒业务计数器看业务处理速度很平均. 接下来是排查步骤: 1. dstat -tam 大概每10s一个周期,网络流量开始变得很小,随后突然增 ...

  5. erlang note

    没有关于erlang interface ,继续寻找吧... --------------------------------------------------------------- erl - ...

  6. Erlang 103 Erlang分布式编程

    Outline 笔记系列 Erlang环境和顺序编程Erlang并发编程Erlang分布式编程YawsErlang/OTP 日期              变更说明 2014-11-23 A Outl ...

  7. erlang R17新socket选项{active,N}

    erlang R17带来了新的socket选项{active,N} .与{active,once}连同应用层提供的流量控制.为什么会这样选择,{active,once}不能够有效地抑制了很多socke ...

  8. 网络传输数据封装详解(IP,UDP,TCP)

    IP数据包也叫IP报文分组,传输在ISO网络7层结构中的网络层,它由IP报文头和IP报文用户数据组成,IP报文头的长度一般在20到60个字节之间,而一个IP分组的最大长度则不能超过65535个字节.  ...

  9. 《Erlang程序设计(第2版)》

    <Erlang程序设计(第2版)> 基本信息 作者: (瑞典)Joe Armstrong 译者: 牛化成 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115354 ...

随机推荐

  1. java 19 -15 File类批量更改文件名的方法

    /* 需求: * 把H:\三国演义下面的视频名称修改为 00?_介绍.avi 思路: A:封装目录 B:获取该目录下所有的文件的File数组 C:遍历该File数组,得到每一个File对象 D:拼接一 ...

  2. ArcGIS实现在线与线交叉处打断线(批量)

    from:http://he1989.blog.163.com/blog/static/2052041092012631112459704/ 打开ArcgisDesktop中的ArcToolBox 找 ...

  3. 18种CSS3loading效果完整版,兼容各大主流浏览器,提供在线小工具使用

    今天把之前分享的两篇博客<CSS3实现10种Loading效果>和 <CSS3实现8种Loading效果[二]>整理了一下.因为之前所分享的各种loading效果都只是做了we ...

  4. javascript去掉空格

    1.  去掉字符串前后所有空格: 代码如下: function Trim(str) { return str.replace(/(^\s*)|(\s*$)/g, ""); } 说明 ...

  5. 了解了这些才能开始发挥jQuery的威力(转)

    链接:http://www.cnblogs.com/dolphinX/archive/2013/10/08/3347677.html 由于当前jQuery如此的如雷贯耳,相信不用介绍什么是jQuery ...

  6. 墙国内新建Rails应用的要点(windows 7环境, Rails 4.2.0)

    1. 使用rails new 命令创建完的应用在自动执行bundle install不会成功,根据出错提示,判断原因有可能是被墙与https的证书的安全性问题. 作为开发环境,选用绕开的办法,在目录  ...

  7. C#性能优化:延迟初始化Lazy<T>

    1. 概述 我们创建某一个对象需要很大的消耗,而这个对象在运行过程中又不一定用到,为了避免每次运行都创建该对象,这时候延迟初始化(也叫延迟实例化)就出场了. 延迟初始化出现于.NET 4.0,主要用于 ...

  8. IT男的”幸福”生活"续5

    各位哥们姐妹们,好,嗯,好.很多回复还是提到[IT男的”幸福”生活"]是小说来着剧情不真实,我还是免为其难的说一下吧.是真的回忆录,具体的事情都有.人也是真实的.在这里还是谢谢,这几天一直关 ...

  9. Ajax在调用含有SoapHeader的webservice方法

    ·         [WebService(Namespace = "http://tempuri.org/")] ·             [WebServiceBinding ...

  10. OpenCart 最新使用教学视频合集

    OpenCart 是一个很火的开源电商系统,国内越来越多的人开始使用 OpenCart 搭建自己的电商网站.OpenCart 的功能非常强大,当然功能也非常多.这里整理了 OpenCart 最重要的一 ...