Я пытаюсь открыть базовое соединение с сервером HL7, куда я отправляю запрос и получаю ответ ACK.Это будет выполняться непрерывно.
- Если это выполняется непрерывно, когда я закрываю розетку?Правильно ли я это делаю, в этом случае?
- Если я закрою сокет, как мне снова открыть его?Javadocs для ConnectionHub указывает следующее:
attach(java.lang.String host, int port, Parser parser,
java.lang.Class<? extends LowerLayerProtocol> llpClass)
Возвращает Соединение по указанному адресу, открывая это Соединение при необходимости.
Однако в реальномlife, он не будет открывать новое соединение, если оно уже было закрыто.
Patient patient = appt.getPatient();
Parser parser = new GenericParser();
Message hl7msg = parser.parse(wlp.getORMString(appt));
//Connect to listening servers
ConnectionHub connectionHub = ConnectionHub.getInstance();
// A connection object represents a socket attached to an HL7 server
Connection connection = connectionHub.attach(serverIP, serverPort,
new PipeParser(), MinLowerLayerProtocol.class);
if (!connection.isOpen()) {
System.out.println("CONNNECTION is CLOSED");
connection = connectionHub.attach(serverIP, serverPort, new PipeParser(),
MinLowerLayerProtocol.class);
if (!connection.isOpen()) {
System.out.println("CONNNECTION is still CLOSED");
}
}
Initiator initiator = connection.getInitiator();
Message response = initiator.sendAndReceive(hl7msg);
String responseString = parser.encode(response);
System.out.println("Received response:\n" + responseString);
connection.close();
Результат: Первый проход прошел успешно, запрос отправлен и ACK получен.Любой последующий вызов этого метода приводит к java.net.SocketException: Socket closed
"на стороне клиента. Если я удалю вызов connection.close()
, то он будет работать нормально в течение определенного времени, затем сокет закроется сам.