2012-08-17 213 views
0

我使用Celluloid IO从套接字读取。传入消息的语法如下阅读与EOT,SOH,STX等字符插座

sometextsometextsometext

其中

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插座。一旦阅读消息,我会将相关部分重新排列。

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

回答

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