2012-03-10 6 views
0

다음 코드를 사용하여 (EventMachine이 지원하는) 네트워크 서비스에 연결하고 하나의 소켓 연결을 사용하여 여러 명령을 실행할 수있는 상황에 약간의 문제가 있습니다.루비의 TCP 소켓에서 한 줄의 데이터 만 읽을 수 있습니까?

#!/usr/bin/env ruby 

require 'socket' 

opts = { 
    :address => "0.0.0.0", 
    :port => 2478 
} 

connection = TCPSocket.open opts[:address], opts[:port] 

# Get ID 
connection.print "ID something" 
puts connection.read 

# Status 
connection.print "STATUS" 
puts connection.read 

# Close the connection 
connection.close 

는 여기에 지금 그것이 알고 닫 접속의 대기를 추정대로 connection.read을 실행할 때

module ConnectionHandler 

    def receive_data data 
    send_data "Some output #{data}" 
    end 
end 

그러나, 내 첫 번째 루비 스크립트가 중단 ... 내 EventMachine 서버 투수의 모습입니다 그 모든 데이터가 있습니까? 이것은 내가 원하는 일이 아닙니다.

소켓 서버는 한 줄에 하나의 명령을 받아 한 줄의 출력 만 반환합니다.

어떻게하면됩니까? 감사.

답변

1

서버가 \ n 문자로 끝나는 응답을 보내는 경우 connection.gets 메서드는 수신 된 데이터 행을 반환합니다. 그래서 통화가 끝날 때 \n을 추가하고 puts connection.gets으로 전환하면 멋졌습니다!

+0

그래서'puts'가 개행 문자를 추가하기 때문에 그 대답과 upvote를 삭제하고 다른 것을 받아 들여야합니다. 이것은 공정한 것입니다. –

관련 문제