2.基础知识,Erlang gen_tcp 案例

1.客户端和服务端互联案例,举例中客户端和服务端都是用Erlang
服务端
 1 server() ->
 2     LSock = listen(), %监听本机的某个端口
 3     {ok, Sock} = gen_tcp:accept(LSock), %保持监听状态,程序会停在这一步,直到有客户端连接上
 4     {ok, Bin} = do_recv(Sock, []), %接收参数
 5     ok = gen_tcp:close(Sock), %关闭这个监听
 6     Bin.
 7
 8 %%监听本机的5678端口,发送的数据超过4字节才被接收
 9 listen() ->
10     {ok, LSock} = gen_tcp:listen(5678, [binary, {packet, 4},
11                                         {active, false}]),
12     LSock.
13
14 %%接收参数,两种情况
15 %%1.如果客户端一直发送消息,尾递归调用一直接收消息
16 %%2.如果客户端关闭连接,返回{ok, Data}
17 do_recv(Sock, Bs) ->
18     case gen_tcp:recv(Sock, 0) of
19         {ok, B} ->
20             do_recv(Sock, [Bs, B]);
21         {error, closed} ->
22             {ok, list_to_binary(Bs)}
23     end.

客户端
SomeHostInNet = "localhost", %%服务器IP
    {ok, Sock} = gen_tcp:connect(SomeHostInNet, 5678,
                                 [binary, {packet, 0}]), %连接上服务器,
    %%服务器端表现:
    %%1.在连接上服务器之前,服务端一直停在gen_tcp:accept(LSock),
    %%2.链接上服务器之后,服务端程序继续执行,
    %%3.执行到do_recv(Sock, []),又会处于监听状态(此时监听客户端发送的数据)

    ok = gen_tcp:send(Sock, "Some Data"), %发送数据,这一步可以发送很多消息

    ok = gen_tcp:send(Sock, "Some Data2"),

    ok = gen_tcp:send(Sock, "Some Data3"),
    %%服务端表现:服务端一直处于接收消息状态

    ok = gen_tcp:close(Sock). %关闭连接,此时服务端do_recv(Sock, [])执行完毕,继续往下执行gen_tcp:close(Sock)
				
时间: 2024-11-05 20:25:54

2.基础知识,Erlang gen_tcp 案例的相关文章

C语言基础知识之综合案例(1)

1,在屏幕上显示信息. 最常见的显示信息的方式是使用库函数printf()和puts(). a,转义字符. b,转移说明符. printf()函数位于标准C语言库中,它是最通用的在屏幕上显示信息的方式. #include<stdio.h> void main() { //在屏幕上显示文本信息 very nice ! printf("very nice !"); //显示变量的值 int number = 10; /* 格式化字符串 格式化字符串指定如火如荼格式输出,由以下三

Java提取文本文档中的所有网址(小案例介绍正则基础知识)

正则表达式基础以及Java中使用正则查找 定义: 正则表达式是一些用来匹配和处理文本的字符串 正则的基础(先大致了解下) 1. 正则表达式的作用 查找特定的信息(搜索) 替换一些文本(替换) 2. 正则基础知识 1. 元字符 . 匹配除换行符(\n)以外的任何单个字符 w 匹配字母.数字.下划线.汉字 s 匹配任意空白字符(包括空格.制表符.换页符等) d 匹配数字,匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 例子: #匹配abc开头的字符串 ^abd #匹配8位数字的QQ

RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候. 消息队列主要解决了应用耦合.异步处理.流量削锋等问题. 当前使用较多的消息队列有RabbitMQ.RocketMQ.ActiveMQ.Kafka.ZeroMQ.MetaMq等,而部分数据库如Re

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

前面几篇文章采用的案例的方法进行介绍的,这篇文章主要介绍Python常用的扩展包,同时结合数据挖掘相关知识介绍该包具体的用法,主要介绍Numpy.Pandas和Matplotlib三个包.目录:        一.Python常用扩展包        二.Numpy科学计算包        三.Pandas数据分析包        四.Matplotlib绘图包 前文推荐:       [Python数据挖掘课程]一.安装Python及爬虫入门介绍       [Python数据挖掘课程]二.K

javascript的基础知识及面向对象和原型属性

自己总结一下javascript的基础知识,希望对大家有用,也希望大家来拍砖,毕竟是个人的理解啊 1.1 类型检查:typeof(验证数据类型是:string) var num = 123; console.log(typeof num); // 1.2 in 运算符 作用:判断指定属性是否存在于指定的对象中. 如果指定的属性存在于指定的对象中,则 in 运算符会返回 true. 语法: 属性 in 对象 返回值:true 或者 false 示例: var obj = { age: 18 };

网络基础知识查询

第一章.基础网络概念 1.1 网络是个什么玩意儿 全世界的人种有很多,人类使用的语言种类也多的很.那如果你想要跟外国人沟通时,除了比手划脚之外,你要如何跟对方讲话? 大概只有两种方式啰,一种是强迫他学中文,一种则是我们学他的语言,这样才能沟通啊.在目前世界上的强势语言还是属于英语系国家, 所以啰,不管是啥人种,只要学好英文,那么大家都讲英文,彼此就能够沟通了.希望不久的未来,咱们的中文能够成为强势语言啊! 这个观念延伸到网络上面也是行的通的,全世界的操作系统多的很,不是只有 Windows/Li

python基础知识(字符串)

在我们学习python基础教程的过程中,一般会涉及字符串.列表.元组.字典等基础知识,接下来会将自己学习字符串.列表.元组以及字典的案例等记录如下: 一.字符串: 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串.创建字符串很简单,只要为变量分配一个值即可.例如: var1="Big data" var2='openstack' 需要注意的是在python里面双引号("")与单引号('')表示的含义完全相同,并不会存在像S

RunLoop总结:RunLoop基础知识

没有实际应用场景,很难理解一些抽象空洞的东西,所以前面几篇文章先介绍了RunLoop的几个使用场景. 另外AsyncDisplayKit中也有大量使用RunLoop的示例. 关于实际的使用RunLoop 的案例和使用场景就不总结了,今天总结一点RunLoop的基础知识和概念. 什么是RunLoop? 顾名思义,它就是一个运行循环.一个RunLoop 就是一个用于处理既定工作和接收到的外来事件的事件处理循环.RunLoop的存在目的就是当线程中有任务时,保证线程忙着干活:当线程中没有任务时,让线程

Android基础知识(6)—数据持久化之数据存储

阅读前,请浏览此处上方目录. Android基础知识(6)-数据持久化之数据存储 本章内容为个人笔记,参考书籍有:<疯狂的android>第3版.<第一行代码> 首先,我们要知道什么是数据持久化. 数据持久化就是指那些内存中的瞬时数据保存到存储设备中,保证即使手机在关机的情况下,这些数据不会丢失.保存在内存中的数据是处于瞬时状态,保存在存储设备中的数据是处于持久状态.持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换. Android系统主要提供了三种方式用于简