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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从命令行将主机名传递给gen_tcp相关的知识,希望对你有一定的参考价值。

我想将命令行中的主机名和端口传递给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
")
  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'一切正常。我在这里错过了什么?

答案

您可能需要将host的字符串参数转换为charlist。 :gen_tcp.connect/4需要一个erlang字符串(Elixir char list)作为它的第一个参数。

以上是关于如何从命令行将主机名传递给gen_tcp的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行将参数传递给gradle

是否可以通过命令行将 vbscript 数组传递给 C++ exe?

通过命令行将一个空数组传递给 Dropwizard

通过命令行将变量传递给powershell脚本

R命令行将文件名传递给参数中的脚本(Windows)

如何从命令行将参数传递给 Makefile?