`
AvinDev
  • 浏览: 113360 次
社区版块
存档分类
最新评论

Erlang网络编程-Binary

阅读更多
在Erlang里面,Binary支持强大的模式匹配,这为编写网络通讯程序提供了便利。

比如一个协议串,格式如下
HEADER(2 Bytes) ID (1 Byte) MESSAGE(10 Bytes)
可以这样匹配
<<Header:16, Id:8, Message:10/binary-unit:8>>

有一些协议,头部是接下来数据的长度,这样就更简单了
<<Size:8, Content:Size/binary-unit:8>>

一个IPV4的头部可以这样表示
引用
<<Version:4, IHL:4, TypeOfService:8, TotalLength:16,
Identification:16, FlagX:1, FlagD:1, FlagM:1,
FragmentOffset:13, TTL:8, Protocol:8,
HeaderCheckSum:16, SourceAddress:32,
DestinationAddress:32, Rest/binary>> = Packet.



具体应用
比如定义了一个协议,头部2字节为长度,接下来是Body。要接收这样一个包,有可能会不全,也有可能2个包一起接收了,这时候可以这样做:

loop(Socket, Buffer) ->
    RecvBinary = gen_tcp:recv(Socket,0),
    Binary = list_to_binary(binary_to_list(Buffer) ++ binary_to_list(RecvBinary)),
    case Binary of
        <<Size:16, Body:Size/binary-unit:8, Remaining/binary>> ->
            handleMessage(Body),
            loop(Socket, Remain);
        <<_/binary>> ->
            loop(Socket, Binary)
    end.


这个解决方案还是相当笨拙的,Erlang本身有更好的解决方案,这里只是为了演示。
分享到:
评论

相关推荐

    erlang_win64.rar

    Erlang是一种高级编程语言,特别为并发、分布式和实时系统设计,由瑞典电信设备制造商Ericsson开发。在IT行业中,Erlang因其强大的错误恢复能力和热代码升级特性而受到欢迎,尤其在大规模并发系统、网络应用以及消息...

    Erlang User Reference Manual

    这些信息表明本手册是关于Erlang编程语言及其运行时系统Erlang OTP的官方文档。它主要面向开发者,提供了安装、配置以及使用Erlang OTP的详细指导。 #### 重要知识点详解 ##### 安装Erlang OTP **1.1 Installing ...

    介绍 Erlang binary 和 bit string 数据类型的经典文章

    ### Erlang Binary与Bit String 数据类型详解 #### 引言 Erlang 是一种功能强大且灵活的编程语言,尤其适合开发高并发、分布式及容错性应用。自 R12B 版本以来,Erlang 在处理二进制数据方面引入了两项重大更新:...

    Erlang开发环境搭建

    Erlang是一种功能强大且灵活的编程语言,广泛应用于 telecommunications、金融、电子商务等领域。然而,要充分发挥Erlang的潜力,需要搭建合适的开发环境。本文将指导读者如何在Windows平台下搭建Erlang开发环境,...

    inside Erlang VM3

    Erlang是一种通用、并发、强容错的编程语言,最初由爱立信公司开发,旨在解决电信系统的高并发、高可靠需求。它运行在Erlang虚拟机(Erlang Virtual Machine, ERTS)之上,ERTS提供了语言的基础执行环境。 #### ...

    erlang+rabbitmq.zip

    Erlang 是一种由瑞典电信公司 Ericsson 开发的编程语言,以其并发性、容错性和实时性而闻名,特别适合构建高可用性系统。RabbitMQ 是一个基于 AMQP(Advanced Message Queuing Protocol)的消息代理软件,它允许应用...

    <27>erlang record

    标题中的“&lt;27&gt;erlang record”可能指的是Erlang编程语言中的Record特性,它是一种数据结构,类似于结构体或者哈希表,用于组织和操作数据。在Erlang中,Record提供了一种方便的方式来定义和访问具有固定字段的数据...

    erlang实战IP查询服务

    ### Erlang实战IP查询服务知识点解析 #### 一、项目背景与目标 - **项目名称**: Erlang实战IP查询服务 ...对于有兴趣学习Erlang或者希望深入了解其在网络编程中的应用的开发者来说,这是一个非常有价值的实践案例。

    Erlang项目内存泄漏分析方法

    Erlang是一种用于构建并发应用的编程语言,其分布式计算模型在处理高可用和高并发系统时表现出色。然而,即使是在Erlang这样的系统中,内存泄漏也依然是一个不容忽视的问题。它会导致系统可用性降低和性能下降。因此...

    erlang r17官方api及stdlib手册

    Erlang是一种面向并发的、函数式编程语言,主要用于构建分布式、容错性强的系统。R17是Erlang的一个版本,它包含了对先前版本的改进和新特性。本手册是Erlang R17的官方API及stdlib文档,为开发者提供了详尽的函数...

    binpp::1234:Erlang二进制漂亮打印机

    在Erlang中,二进制数据是一种重要的数据类型,广泛用于处理网络协议、文件读写、序列化等场景。二进制数据在Erlang中称为`binary`,它由一系列字节组成,可以是任意长度。 **binpp:Erlang二进制漂亮打印工具** `...

    Efficiency Guide (erlang)

    假设读者已经熟悉Erlang编程语言及其OTP概念。 #### 1.2 Erlang性能的八大误区 ##### 1.2.1 误区:函数式编程(Funs)很慢 这是一个常见的误解。事实上,Erlang中的匿名函数(funs)是非常高效且灵活的工具,可...

    Erlang中的socket编程简单例子

    在Erlang中,使用socket进行网络编程是非常重要的基础技能,它可以让我们创建能够处理网络通信的服务器和客户端应用。本文将深入探讨Erlang中的TCP和UDP socket编程,以及如何实现简单的echo服务器和客户端。 首先...

    erlang open poker 最好的入门程序源码

    6. **数据结构与模式匹配**:Erlang的元组(tuple)、列表(list)和二进制数据(binary)等数据结构在源码中会得到广泛运用。模式匹配用于解构数据和条件分支,使得代码更简洁。 7. **网络编程**:OpenPoker作为...

    clojure-erlastic:Micro库,它使用erlang JInterface库来解码和编码Binary Erlang Term和带有core.async通道的简单erlang端口接口。 因此,您可以使用clojure抽象与erlang协程进行通信

    Clojure-erlastic是一个微小但功能强大的库,旨在为Clojure开发者提供一个简单而高效的接口,以利用Erlang的JInterface库来处理Binary Erlang Term(BERT)的编码和解码,并通过core.async通道与Erlang进程进行通信...

    erlang学习4.pdf

    Erlang作为一种专为构建高并发、高可用性系统而设计的编程语言,其核心特性之一就是强大的分布式处理能力。本篇文档旨在深入解析Erlang的分布式调用机制及分布式TableServer的相关实现细节,帮助读者更全面地理解...

    otp_win64_23.2.exe

    OTP(Open Telephony Platform)是Erlang编程语言的核心库,包含了各种用于构建可靠分布式系统的基础工具。版本号"23.2"表示这是Erlang OTP的第23个主要版本的第二个次要更新。 描述中提到"windows安裝rabbitmq",...

    otp_win64_21.1

    OTP是Erlang编程语言的一个核心组件,由Ericsson开发,用于构建高度可靠和可扩展的分布式系统。Erlang是一种静态类型、函数式编程语言,以其在并发处理、容错性和热代码升级方面的强大能力而闻名。 描述中提到的...

    球拍位语法:球拍的Erlang样式二进制位串

    在这个例子中,`packet-parser`解析器会从`some-binary-data`中提取出三个字段:“magic-number”、“version”和“length”。 总结来说,Racket的球拍位语法提供了一种强大且直观的方式来处理二进制数据。它结合了...

Global site tag (gtag.js) - Google Analytics