2014-10-10 86 views
1

我正在去接收設備上的數據,但是這些數據是二進制流,我把這些數據存儲起來,然後讀取並正確顯示它們,是否有一個更好的方法?如何使用ruby解析接收來自TCP的二進制流

require 'socket' 

server = TCPServer.open(2000) 
loop { 
    Thread.start(server.accept) do |client| 

    File.open("tmp","w") { |file| file.write(client.gets)} 
    File.open("tmp").each do |f| 
    puts f.unpack('H*') 
    end 

    client.puts(Time.now.ctime) # Send the time to the client 
    client.puts "Closing the connection. Bye!" 
    client.close    # Disconnect from the client 
    end 
} 

所接收的數據是這樣的:XX^Q^A^HB0 @ < 90> 26 2^B^@ < 83> EV

我想是這樣的:787811010862304020903236202032020001c26c0d0a

對不起,我可憐的英語!

回答

2

如果有多個客戶端,使用帶名稱的臨時文件會導致問題發送數據;臨時文件將被覆蓋。

您不需要使用臨時文件。

require 'socket' 

server = TCPServer.open(2000) 
loop { 
    Thread.start(server.accept) do |client| 
    puts client.gets.unpack('H*') 
    client.puts(Time.now.ctime) # Send the time to the client 
    client.puts "Closing the connection. Bye!" 
    client.close 
    end 
}