2013-08-07 8 views
0

Я использую учебное пособие EventMachine в качестве отправной точки для экспериментов с отправкой/получением двоичных данных. Образец кода:Eventmachine: Escapes полученные двоичные данные

#!/usr/bin/env ruby 

require 'rubygems' # or use Bundler.setup 
require 'eventmachine' 

class EchoServer < EM::Connection 
    def receive_data(data) 
    puts data 
    send_data(data) 
    end 
end 

EventMachine.run do 
    # hit Control + C to stop 
    Signal.trap("INT") { EventMachine.stop } 
    Signal.trap("TERM") { EventMachine.stop } 

    EventMachine.start_server("0.0.0.0", 10000, EchoServer) 
end 

Я использую telent для подключения к EM сервера

telent -8 localhost:10000 

шлю следующие данные на сервер EM:

\x17\xEB\xB3\b\x05\x00\x00\x00\x01\x00\x00\x89Bo\xAF 

EM печатает это:

\\x17\\xEB\\xB3\\b\\x05\\x00\\x00\\x00\\x01\\x00\\x00\\x89Bo\\xAF\r\n 

По какой-то причине, он ускользает от косых черт и добавляет \r\n к полученным данным.

Как остановить EM от экранирования данных и просто принять исходный двоичный файл, который был отправлен на него?

ответ

0

Оказывается, виновником является telnet. Я решил это, используя netcat.

Команда из этого вопроса: How to escape hex values in netcat

echo "\x17\xEB\xB3\b\x05\x00\x00\x00\x01\x00\x00\x89Bo\xAF" | nc localhost 10000