Как отправить несколько сообщений через одно сокетное соединение? - PullRequest
1 голос
/ 11 ноября 2019

Я пытаюсь отправить массив сообщений через одно и то же сокетное соединение, но получаю сообщение об ошибке.

Вот мой код клиента:

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?

...