我有一台机器向TCP / IP服务器发送多行消息。但是,当我使用任何简单的Ruby Server时,我只能接收第一行和最后一行(作为单独连接中的单独消息)。我已尝试使用TCPServer
,EventMachine
以及我能找到的所有内容,但现在我被卡住了。
当一个快速的Python脚本显示整个消息时,机器肯定会发送整个消息。
其中一个Ruby服务器 (在Rails项目中使用 - 在config / initializers中)
Thread.new do
require 'rubygems'
require 'thread'
require 'socket'
require 'ruby-hl7'
PORT = 2100
srv = TCPServer.new(PORT)
puts "proxy_server listening on port: %i" % PORT
loop {
Thread.start(srv.accept) do |message|
puts "Recieved message."
puts message.read
end
}
end
Ruby服务器的输出
MSH|^~\&|^SureSignsVS||||20070302014355||ORU^R01^ORU_R01|CN212079910000000017|P|2.4|||||||||2.16.840.1.113883.9.2.1
OBX||NM|0002-4182^HR_Pulse^MDIL||87|0004-0aa0^bpm^MDIL|||||F||||||0002-4bb8^SpO2^MDIL|||||||2.16.840.1.113883.9.2.1
OBX||NM|0002-4182^HR_Pulse^MDIL||87|0004-0aa0^bpm^MDIL|||||F||||||0002-4bb8^SpO2^MDIL|||||||2.16.840.1.113883.9.2.1
(然后最后一行重复,但这是预期的,因为机器每60秒重复发送一次消息)
Python服务器
import socket
TCP_IP = '192.168.1.39'
TCP_PORT = 2100
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connection address:', addr
while 1:
data = conn.recv(BUFFER_SIZE)
if not data: break
print "received data:", data
conn.close()
Python服务器的输出(预期和理想输出)
MSH|^~\&|^SureSignsVS||||20131124213151||ORU^R01^ORU_R01|CN2120792100000000Q8|P|2.4|||||||||2.16.840.1.113883.9.2.1
PID|||D1234567||^^
PV1|||^^|||||||||||||||A|
ORC|NW|||||||||||||||||CN21207991
OBR||||SPOTCHECK|||20131121190052|||
OBX||NM|0002-4bb8^SpO2^MDIL||100|0004-0220^%^MDIL|||||F
OBX||NM|0002-4a05^NBPs^MDIL||100|0004-0f20^mmHg^MDIL|||||F|||20131121185945
OBX||NM|0002-4a06^NBPd^MDIL||60|0004-0f20^mmHg^MDIL|||||F|||20131121185945
OBX||NM|0002-4a07^NBPm^MDIL||69|0004-0f20^mmHg^MDIL||L|||F|||20131121185945
OBX||NM|0002-4182^HR_Pulse^MDIL||86|0004-0aa0^bpm^MDIL|||||F||||||0002-4bb8^SpO2^MDIL
提前谢谢你。