2

UDPSocket クラスを介してサーバーに 16 進数データを送信しようとしています。

require 'socket'
socket = UDPSocket.new
socket.send('230055', 0, '192.168.1.205', 50000)

230055 は、送信しようとしている 16 進コマンドです。これは、16進数を取得してASCIIに変換して送信すると、実際に機能します。生の16進データを送信することは可能ですか?

4

2 に答える 2

1

私の理解が正しければ、0x23、0x00、および 0x55 の 3 バイトをソケットに送信する必要があります。それは次を使用して行うことができますArray.pack

socket.send([0x23, 0x00, 0x55].pack('C*'), 0, '192.168.1.205', 50000)

これにより、3 つの 16 進数が 3 つの符号なしバイトに変換されます。これは、'C*' フォーマット文字列が指定するものであり、ソケットを介して送信されます。Array.pack他の変換が必要な場合は、ドキュメントを参照してください。

于 2013-06-30T21:37:29.540 に答える
0

私は次のようなことをしました:

#!/usr/bin/ruby
require 'socket'
require 'parseconfig'
wifi_bridge_ip = '192.168.1.205'
wifi_bridge_port = 50000

#define lamp states
lamp_on = "\x22\x00\x55"
lamp_off = "\x21\x00\x55"

case ARGV[0]
when "on"
  socket = UDPSocket.new
  socket.send(lamp_on, 0, wifi_bridge_ip, wifi_bridge_port)

when "off"
  socket = UDPSocket.new
  socket.send(lamp_off, 0, wifi_bridge_ip, wifi_bridge_port)

.....

when "color"
  #set color argument to be an integer
  passed_color = ARGV[1].to_i
  #puts "passed_color is #{passed_color}"

  #convert that to a hex value
  colorcode = passed_color.to_s(16)
  #puts "hex color code is #{colorcode}"

  #send the value being sure to encode the color code into hex
  set_color = "\x20#{colorcode.hex.chr}\x55"
  socket = UDPSocket.new
  socket.send(set_color, 0, wifi_bridge_ip, wifi_bridge_port)

完全なコードはgithubで入手できます。

私は基本的に入力値を16進数に変換して送信しました。動作します。

于 2014-01-24T02:49:46.183 に答える