erlang/elixir gen_tcp connect - 不连接但telnet wil

Posted

技术标签:

【中文标题】erlang/elixir gen_tcp connect - 不连接但telnet wil【英文标题】:erlang/elixir gen_tcp connect - not connecting but telnet wil 【发布时间】:2018-06-01 08:13:10 【问题描述】:

我有一台可以远程登录的(斑马)打印机:

jasongoodwin$ telnet 192.168.101.051 9100
Trying 192.168.101.51...
Connected to 192.168.101.051.
Escape character is '^]'.

然后我可以从控制台向它发送一些数据,它会为我打印一个标签。

我也可以从 scala 连接和打印没问题:

def printZpl(zpl: String, ip: String, port: Int): Unit = 
  val clientSocket = new Socket(ip, port)
  val outToServer = new DataOutputStream(clientSocket.getOutputStream())
  outToServer.writeBytes(zpl)
  clientSocket.close()

但我似乎无法通过 gen_tcp 通过 elixir/erlang 进行连接:

opts = [:binary, active: false]
:ok, socket = :gen_tcp.connect('192.168.101.051', 9100, opts)

Iex 只是冻结并最终超时。工作正常连接到例如redis ... 我假设此连接的某些选项或质量导致它从 elixir/erlang 失败?

我发现 gen_tcp 文档没有帮助 - 我尝试了一堆不同的参数。

【问题讨论】:

您在 Telnet 中使用端口 9100,并在 Elixir 中尝试使用端口 6379。您确定您使用的是正确的端口吗? 是的,这只是一个错字,不是代码中的问题。我会修复它 - 谢谢。 可能是因为我输入的是 051 而不是 51 不似乎不是问题。 你的 IP 地址很乱。请将所有内容修复为正确的(第一个 telnet 命令有×.×.×.85,其他有×.×.×.51。) 【参考方案1】:

问题在于 IP 地址前面有一个 0

:ok, socket = :gen_tcp.connect('192.168.101.051', 9100, opts)

如果我像这样连接,这行得通。

iex(1)> opts = [:binary, active: false]
[:binary, :active, false]
iex(2)> :ok, socket = :gen_tcp.connect('192.168.101.51', 9100, opts)
:ok, #Port<0.1243>

【讨论】:

以上是关于erlang/elixir gen_tcp connect - 不连接但telnet wil的主要内容,如果未能解决你的问题,请参考以下文章

Docker 上的 Erlang/Elixir 和热代码交换

如何在服务器上正确安装 Erlang、Elixir 和 mix?

Elixir/Erlang 中的命名函数是不是有等效于 __MODULE__ 的方法?

Erlang/Elixir精选-第2期(20191209)

Erlang/Elixir精选-第1期

如何从 Erlang/Elixir 中的 ets 集中选择一个随机元素?