如何从命令行将主机名传递给gen_tcp

时间:2017-12-18 22:37:34

标签: tcp elixir

我想将命令行中的主机名和端口传递给gen_tcp.connect。

defmodule MyComm.Application do
  use Application

  def main(args \\ []) do
    {options, _, _} = parse_args(args)

    connect(options[:host], options[:port])
    # connect('localhost', options[:port])
  end

  def connect(host, port) do
    opts = [:binary, active: false]

    {:ok, socket} = :gen_tcp.connect(host, port, opts)

    :gen_tcp.send(socket, "123\r\n")
  end

  def parse_args(args \\ []) do
    OptionParser.parse(args, switches: [host: :string, port: :integer])
  end
end

运行上面的示例会导致:badarg错误:

  

**(退出):badarg       (内核)gen_tcp.erl:149 :: gen_tcp.connect / 4       (mycomm)lib / application.ex:14:MyComm.Application.connect / 2       (elixir)lib / kernel / cli.ex:76:Kernel.CLI.exec_fun / 2中的匿名fn / 3

然而,通过硬编码'localhost'一切正常。 我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您可能需要将host的字符串参数转换为charlist。 public class Model { private int id; private String name; public Model() {} public Model(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 需要一个erlang字符串(Elixir char list)作为它的第一个参数。

相关问题