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 までソケットから読み取る信頼できる方法を探しています。メッセージが読まれたら、関連するセクションを正規表現します。

ソケット読み取りストリームと正規表現で上記の 16 進文字を検出するためのガイダンスは非常に役立ちます。ガイダンス?

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 に答える