Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/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中的TCPSocket获取原始(未解码)字节数组_Tcp_Ruby - Fatal编程技术网

如何从Ruby中的TCPSocket获取原始(未解码)字节数组

如何从Ruby中的TCPSocket获取原始(未解码)字节数组,tcp,ruby,Tcp,Ruby,我一直在使用ruby设置带有服务器的TCPSocket,但遇到了一个障碍。当从套接字接收数据时(使用socket.get或socket.recv),我得到如下结果: x00\x03!\xB2\x00\x00*\xCF "x00\x03!\xB2\x00\x00*\xCF".unpack("H*") => ["7830300321b200002acf"] 我在Wireshark中捕获数据包时得到的是 x00\x03\x21\xB2\x00\x00\x2a\xCF 如您所见,\x21被解

我一直在使用ruby设置带有服务器的TCPSocket,但遇到了一个障碍。当从套接字接收数据时(使用
socket.get
socket.recv
),我得到如下结果:

x00\x03!\xB2\x00\x00*\xCF
"x00\x03!\xB2\x00\x00*\xCF".unpack("H*")
=> ["7830300321b200002acf"]
我在Wireshark中捕获数据包时得到的是

x00\x03\x21\xB2\x00\x00\x2a\xCF
如您所见,
\x21
被解码为ASCII等效的
\x2a
被解码为ASCII等效的
*

我已经检查和谷歌搜索了很多次,但还没有找到一个解决方案来获取原始的、未解码的信息。我构建了一个解析器,它将从流中搜索相关数据并获取我需要的内容,但我不想在解码之前浪费时间对其重新编码。或者,我将ASCII合并到解析器中,但这将是一个巨大的痛苦。这个流中有很多字节,对它们进行重新编码将非常耗时。我还看到
netcat
从TCP流返回与ruby相同的输出。我也不知道如何让
netcat
输出未解码的字节数组

代码:

require 'socket'
s = TCPSocket.new "10.0.0.3", 27000

while true do
  item = s.recv(5000)
  puts item
  puts item.inspect
end

这是我第一次尝试socket编程,如果我错过了一些非常明显的东西,我很抱歉。

我是在头脑中发明了这个问题,我很笨

要解决此问题,您只需获取TCP信息字符串,并按如下方式调用
unpack(“H*”)

x00\x03!\xB2\x00\x00*\xCF
"x00\x03!\xB2\x00\x00*\xCF".unpack("H*")
=> ["7830300321b200002acf"]
这与
x00\x03\x21\xB2\x00\x00\x2a\xCF

现在,我只需要调整解析器来拆分它或处理大量字节数组


是的,我是个十足的傻瓜。我将信息存储为
s.recv(5000)。检查
而不是
s.recv(5000)
,因此ruby对字节数组分隔符进行了转义,因此
.pack
无法处理它。当我定期保存信息时,(未替换),
.pack
工作得很好!