当实际的telnet客户端工作时,Elixir gen_tcp.recv不接收有关单元测试的数据

时间:2015-12-12 01:57:20

标签: elixir gen-tcp

我有一个正在运行的telnet服务器,我正在尝试为其创建单元测试。服务器与telnet客户端一起正常工作,并且一旦建立连接就会发送提示。在同一个套接字上发送工作正常。 但是,来自单元测试的TCP客户端拒绝接收数据和超时。我是Elixir的新手,所以,我可能会遗漏一些基本的东西。



opts = [:binary, packet: :line, active: false, reuseaddr: true]
{:ok, socket} = :gen_tcp.connect('127.0.0.1', 4040, opts)
{:ok, date_string} = Date.universal |> DateFormat.format("{ISO}")
IO.puts "Socket #{inspect socket} Created #{date_string}"
case :gen_tcp.recv(socket, 0, 5000) do
    {:ok, data} -> IO.puts "Recevied data is #{data}"
    {:error, reason} -> IO.puts "Error: Test Setup: First Receive: Reason: #{reason}"
end




我得到以下输出



Socket #Port<0.5758> Created 2015-12-12T01:36:08.248+0000
Error: Test Setup: First Receive: Reason: timeout
&#13;
&#13;
&#13;

如果有人可以了解Elixir新手做错了什么会有所帮助

1 个答案:

答案 0 :(得分:1)

您的错误可能来自使用packet: :line选项。您可能知道,此选项使得套接字上的数据包不会被“考虑”(例如,如果:activetrue并且它们未被返回,则它们不会作为消息发送如果:gen_tcp.recv/2-3:active,则false直到有换行符。

这意味着如果您的TCP服务器向套接字发送"foo":gen_tcp.recv将不会返回它,因为它不是“行”。发送"foo/n"会被:gen_tcp.recv取代。

检查你的服务器,并且它正在发送一个换行的数据包,因为这可能是原因(我看不到你的代码有什么问题:)。