当实际的 telnet 客户端工作时,Elixir gen_tcp.recv 没有收到单元测试的数据
Elixir gen_tcp.recv not receiving data on unit test when actual telnet clients work
我有一个正常工作的 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
如果有人能阐明 Elixir 新手做错了什么,那将会有所帮助
您的错误可能来自使用 packet: :line
选项。您可能知道,此选项使得套接字上的数据包不是 "considered"(例如,如果 :active
是 true
并且它们不是return由 :gen_tcp.recv/2-3
编辑,如果 :active
是 false
),直到出现换行符。
这意味着如果您的 TCP 服务器通过套接字发送 "foo"
,:gen_tcp.recv
将不会 return,因为它不是 "line"。发送 "foo/n"
会被 :gen_tcp.recv
接收。
检查你的服务器,它正在发送一个换行符终止的数据包,因为这可能是原因(我看不出你的代码有任何其他问题:))。
我有一个正常工作的 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
如果有人能阐明 Elixir 新手做错了什么,那将会有所帮助
您的错误可能来自使用 packet: :line
选项。您可能知道,此选项使得套接字上的数据包不是 "considered"(例如,如果 :active
是 true
并且它们不是return由 :gen_tcp.recv/2-3
编辑,如果 :active
是 false
),直到出现换行符。
这意味着如果您的 TCP 服务器通过套接字发送 "foo"
,:gen_tcp.recv
将不会 return,因为它不是 "line"。发送 "foo/n"
会被 :gen_tcp.recv
接收。
检查你的服务器,它正在发送一个换行符终止的数据包,因为这可能是原因(我看不出你的代码有任何其他问题:))。