如何从命令行将主机名传递给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的主要内容,如果未能解决你的问题,请参考以下文章