我试图通过同一个套接字连接发送一组消息,但出现了一个错误。你知道吗
这是我的客户代码:
def send_over_socket(hl7_msg_array):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((config.HOST, config.PORT))
for single_hl7_msg in hl7_msg_array:
sock.send(single_hl7_msg.to_mllp().encode('UTF-8'))
received = sock.recv(1024*1024)
print("Sent: ", received)
sock.shutdown()
sock.close()
在调试代码时,我看到在调用第二条消息的sock.recv(1024*1024)
时发生异常。你知道吗
错误如下:
ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine
服务器端代码:
def run_mllp_server():
class PDQHandler(AbstractHandler):
def reply(self):
msg = hl7.parse(self.incoming_message)
msg_pid = msg[1][3]
msg_key = msg[2][3][0][1]
msg_value = msg[2][5]
lock = RLock()
lock.acquire()
results_collection[str(msg_pid)][str(msg_key)] = str(msg_value)
lock.release()
print("Received: ", repr(self.incoming_message))
return parse_message(self.incoming_message).to_mllp()
# error handler
class ErrorHandler(AbstractErrorHandler):
def reply(self):
if isinstance(self.exc, UnsupportedMessageType):
print("Error handler success 1")
else:
print("Error handler else case")
handlers = {
'ORU^R01^ORU_R01': (PDQHandler,),
'ERR': (ErrorHandler,)
}
server = MLLPServer(config.SOCKET_HOST, config.SOCKET_PORT, handlers)
print("Running Socket on port ", config.SOCKET_PORT)
server.serve_forever()
这里我使用的是MLLP协议,它在后台有一个TCP连接。你知道吗
你能帮我弄清楚发生了什么事吗?是ACK的问题吗?你知道吗
我一点也不懂Python,但是。。。你知道吗
我不认为多条信息是你的问题。看看例外情况,我猜你的第一条信息是正确发送的。然后,您的客户机代码等待收到ACK;但服务器从不发送它。而是关闭连接。你知道吗
另外,确保是否应该使用^{} 而不是
send
。你知道吗解决上述问题后,要在同一连接上发送多条消息,必须遵循MLLP(也称为LLP),以便服务器能够区分消息。你知道吗
这样,当您向侦听器(TCP/MLLP服务器)发送消息时,它会在传入数据中查找开始和结束块。在此基础上,它区分了每一条信息。你知道吗
详情请参阅this答案。你知道吗
相关问题 更多 >
编程相关推荐