【发布时间】:2011-05-17 08:11:38
【问题描述】:
我正在尝试打开与 HL7 服务器的基本连接,我在该服务器上发送请求并获得 ACK 响应。这将持续进行。
- 如果连续进行,我什么时候关闭套接字?在这种情况下,我是否正确实施?
- 如果我关闭了套接字,如何再次打开它? ConnectionHub 的 javadocs 指出以下内容:
attach(java.lang.String host, int port, Parser parser,
java.lang.Class<? extends LowerLayerProtocol> llpClass)
返回给定地址的连接,必要时打开此连接。
但是,在现实生活中,如果它已经关闭,它将不会打开新的连接。
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() 调用,那么它会在一段时间内正常运行,然后套接字会自行关闭。
【问题讨论】: