2011-12-17 51 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正在呼籲新的插座。

相關問題