2017-12-18 5 views
1

ホスト名とポートをコマンドラインからgen_tcp.connectに渡したいと思います。すべてが正常に動作します 'localhost' のハードコーディングすることで、しかしコマンドラインからgen_tcpにホスト名を渡す方法

** (exit) :badarg (kernel) gen_tcp.erl:149: :gen_tcp.connect/4 (mycomm) lib/application.ex:14: MyComm.Application.connect/2 (elixir) lib/kernel/cli.ex:76: anonymous fn/3 in Kernel.CLI.exec_fun/2

:badargエラー:上記の例を実行する

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 

が原因となります。 私はここで何が欠けていますか?

答えて

1

おそらくhostの文字列引数をcharlistに変換する必要があります。 :gen_tcp.connect/4には、最初の引数であるerlang文字列(Elixir char list)が必要です。

+0

はい、それでした。ありがとう。 – Rob

関連する問題