Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将ruby位结构写入套接字_Ruby_Sockets - Fatal编程技术网

将ruby位结构写入套接字

将ruby位结构写入套接字,ruby,sockets,Ruby,Sockets,我用Ruby编写了一个小结构: class UnitHeader < BitStruct default_options :endian => :little unsigned :len, 16, "Length including header and all payload messages" unsigned :msgCount, 8, "Number of messages in payload" unsigne

我用Ruby编写了一个小结构:

class UnitHeader < BitStruct
    default_options :endian => :little
    unsigned :len,          16,  "Length including header and all payload messages"
    unsigned :msgCount,     8,   "Number of messages in payload"
    unsigned :group,        8,   "group the payload messages relate to"
    unsigned :seqNumStart,  32,  "Sequence number of the first payload message"
end

s.write调用似乎没有写入任何数据。我在中找不到有关此问题的任何信息,是否有ruby运算符或类似的运算符用于此目的?

希望这有助于某人

# send side of socket
socket.write("#{uh}")

# recv side of socket
uhdata = socket.read(8).unpack("vcAV")
uh     = UnitHeader.new(:len => uhdata[0], :msgCount => uhdata[1], :group=> uhdata[2], :seqNumStart => uhdata[3])

您提供的代码应该可以正常工作。你的问题可能在别处。以下是如何调试它以确保:

  • 创建UnitHeader并设置适当的值
  • 使用netcat,创建一个侦听器套接字以进行测试,并将接收到的数据转储到文件:
    nc-l 1234>输出
    ,其中1234是要侦听的端口
  • 运行代码(确保刷新或关闭插槽)
  • 使用
    hextump output
    查看结果,并将其与预期结果进行比较

  • 为什么不把它放在JSON中呢?它是二进制数据,下次必须是小尾端格式,请尝试正确描述您的问题。“不起作用”并不能帮助任何人试图帮助别人。你应该描述你一直在做什么,你期望什么,以及你遇到的意外结果。对于这个问题,似乎您在接收数据时遇到了问题,这一点从问题中根本不清楚。upvote需要15个声誉,但当我得到足够的声誉时,我会这样做!
    # send side of socket
    socket.write("#{uh}")
    
    # recv side of socket
    uhdata = socket.read(8).unpack("vcAV")
    uh     = UnitHeader.new(:len => uhdata[0], :msgCount => uhdata[1], :group=> uhdata[2], :seqNumStart => uhdata[3])