2

我正在尝试通过 UDPSocket 类将一些十六进制数据发送到服务器。

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

其中 230055 是我要发送的十六进制命令。如果我采用十六进制,这实际上有效,将其转换为 ascii 并发送。是否可以只发送原始十六进制数据?

4

2 回答 2

1

如果我理解正确,您想将三个字节:0x23、0x00 和 0x55 发送到套接字中。这可以使用Array.pack

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

这会将三个十六进制数字转换为三个无符号字节,这就是“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上找到。

我基本上将输入的值转换为十六进制并发送。作品。

于 2014-01-24T02:49:46.183 回答