erlang学习笔记之基础篇(常见问题小结)

由于个人的兴趣,之前自学过一段时间的erlang, 后来工作忙,慢慢遗忘了,现在计划实现一个高并发的项目,考虑到复杂性和时间限制, 又重新系统的学习erlang。总结了一些容易出现的错误, 这些错误对于刚入门的我,有时不是很轻松就能解决。

1.首先记录一个非常规错误, 只是个人的坏习惯, 写一个Makefile文件,需要将生成的beam文件放入到指定的目录target中, 借鉴C/C++文件的makefile,我写成 erlc a.erl  -o target. 发现生成的文件一直在当前目录,而并不是在target目录,奇了怪了,erlc -help一看, 也是-o 表示指定目录啊,想不通,后来写成 erlc -o target a.erl 就正确了。

2. erlang程序启动或运行出错时,出现了init_boot类似字样, 这种情况一般都是erlang内建函数名写错,或者函数的元数(参数个数写错),或者模块名没有导入。

3.  这个问题我到现在还没有弄明白,erlang中的箭头作用到底是什么。我一开始我认为箭头类似函数开始的标志, 所以我开始一律这种格式命名函数 " xxx() -> ", 后来,当函数中第一条语句是when断言时,这种格式就报错了,这时箭头只能写在when的后面。      

4. 在makefile文件中启动erlang应用程序总是报错, 感觉应该是make进程和erlang shell进程环境变量不一致造成的。

5. 启动或运行erlang程序出错时, 出现了undefined字样, 这类一般也是数名写错,或者函数的元数(参数个数写错),或者模块名没有导入。

6. spawn() 这个函数最开始总是写错参数类型, 该函数常被调用的方式有两种,一是官方推荐的 spwan(Module, Function, [Args], 另一种就是 spawn(fun), 注意这个参数是个fun类型,而不是函数名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Erlang中,我们可以使用`gen_tcp`模块来实现TCP客户端。下面是一个简单的例子,展示如何使用`gen_tcp`模块来连接到一个服务端: ```erlang -module(tcp_client). -export([start/1]). start(Host) -> {ok, Socket} = gen_tcp:connect(Host, 80, [binary, {packet, 0}]), gen_tcp:send(Socket, "GET / HTTP/1.0\r\n\r\n"), receive_data(Socket), gen_tcp:close(Socket). receive_data(Socket) -> case gen_tcp:recv(Socket, 0) of {ok, Data} -> io:format("~s", [Data]), receive_data(Socket); {error, closed} -> ok end. ``` 在上面的例子中,`gen_tcp:connect`函数用于连接到指定的服务端。`Host`参数是服务端的IP地址或域名,`80`是服务端的端口号。`[binary, {packet, 0}]`选项说明我们要传输二进制数据,且数据包不需要打包。 一旦连接建立成功,我们就可以使用`gen_tcp:send`函数向服务端发送数据了。在这个例子中,我们发送了一个HTTP GET请求。接着,我们调用了`receive_data`函数来接收服务端返回的数据。`gen_tcp:recv`函数用于接收服务端发送的数据。`0`参数表示接收的数据包没有大小限制。如果接收到数据,我们就打印出来,并继续调用`receive_data`函数来接收更多的数据。如果服务端关闭了连接,`gen_tcp:recv`函数会返回错误信息`{error, closed}`,我们就可以关闭连接了。 在使用`gen_tcp`模块时,我们需要注意以下几点: - 为了避免阻塞,在发送和接收数据时,我们可以使用`gen_tcp:send/2`和`gen_tcp:recv/2`函数的阻塞模式,即将第二个参数设置为`0`。这样,如果没有数据可发送或接收,函数就会马上返回。 - 如果我们需要发送和接收大量的数据,应该使用`{packet, N}`选项来打包数据。这个选项会将数据分成大小为N的块,并且在每个块前面添加4个字节的头部,用于表示这个块的大小。这样可以避免粘包问题。 - 在发送和接收数据时,我们应该按照服务端和客户端的协议来组织数据包。如果协议有变化,我们也需要修改代码来适应新的协议。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值