2011-12-17 35 views
1

在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并执行上面完全相同的代码。随时问我任何进一步的问题,我会很乐意尽可能详细地回答他们,以帮助我在路上。

在此先感谢。

回答

2

红宝石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正在呼吁新的插座。

相关问题