Ruby - 在Mac和Ubuntu上以不同方式执行的代码
问题描述:
在Mac和Ubuntu安装上执行以下代码时,我遇到了一些奇怪的功能。Ruby - 在Mac和Ubuntu上以不同方式执行的代码
我的代码对我的Arduino,然后客户端是否连接检查(它成功地连接)和I然后使用socket
宝石,然后输出使用Ruby代码经由t.puts
将命令发送到我的Arduino的连接无论我使用Arduino软件将其发送到串行输出。这是很容易的部分。
当在Mac上我的串行输出以下,这是正确执行以下操作:
{power, tv} # t.puts "{power, tv}"
然而,当在Ubuntu上执行相同的代码,我得到的串行输出以下,仿佛它试图再次连接。它不给上述串行输出,它确实在Mac上:
Connecting... # t.puts "{power, tv}" # Connecting... (text is actually coming from Arduino not the below code).
我有双重检查,我的Arduino,IP,代码和端口是正确的(这是它的连接)。我只是没有看到为什么输出在Mac和Ubuntu上会有所不同。
为什么会出现这种情况的原因以及下列代码是否可以在所有环境下正确发送它的方式进行修改?
#!/usr/bin/ruby
require "socket"
#Thread.new {
begin
puts "Connecting to 10.1.1.45..."
t = TCPSocket.new("10.1.1.45", 80)
rescue
puts "error : #{$!}"
else
t.print "{power,tv}"
t.close
puts "Sent command..."
end
#}
记住我可以连接到10.1.1.45就好了(我可以ping等),所以实际的Arduino代码是没有过错这里就我所知,因为我通过插拔测试此它进入Mac和Ubuntu并执行上面完全相同的代码。随时问我任何进一步的问题,我会很乐意尽可能详细地回答他们,以帮助我在路上。
在此先感谢。
答
红宝石puts
只是一个IOStream对象的方法,该对象可以在您不知道它的情况下进行更改。
你可能想试试这个,看看能否解决你的问题:
begin
STDOUT.puts "Connecting..."
t = TCPSocket.new("10.1.1.45", 80)
rescue
STDOUT.puts "error : #{$!}"
else
t.print "{power,tv}"
t.close
STDOUT.puts "Sent command..."
end
这有可能是puts
正在呼吁新的插座。