0

我正在使用赛璐珞 IO 从套接字读取。传入消息具有以下语法

一些文本一些文本一些文本

在哪里

SOH = Hex 1
FS  = Hex 1C
STX = Hex 2
ETX = Hex 3
EOT = Hex 4

我的阅读代码是这样的 -

message = ""
begin
  data = socket.readpartial(4096)
  message << data
end until message =~ /not sure what goes here/

我正在寻找一种可靠的方式从套接字读取直到 EOT。阅读消息后,我将正则表达式输出相关部分。

在套接字读取流和正则表达式中检测上述十六进制字符的一些指导将非常有帮助。指导?

4

1 回答 1

0

这对我有用,谢谢

def parse(message)
  if message =~ /\001(.*)\01C(.*)\002(.*)\003\004/
    return ($1,$2,$3)
  end
end

def read_until_eot(socket)
  eot_found = false
  message = ''
  begin
    data = socket.read()
    eot_found = !!data['\004']
    message << data
  end until eot_found
  message.chomp!
end

def handle_connection(socket)
  # read from socket until EOT
  message = read_until_eot(socket) # <-- need help with
  if (origin,target,payload) = parse(message) #message can be parsed
    #   process message
    output_message = process(payload)
  end
  # write to socket
  socket.write output_message
  # close socket
  socket.close
end
于 2012-08-18T06:12:23.743 回答