我正在构成自己的客户端,以使用一些不常见的协议与现有服务器进行通信。 该协议基本上是通过TLS 1.2 TCP套接字发送和接收XML块的。 它描述了相当长的会话。有时,客户端和服务器将在不断开连接的情况下发送和接收XML数周。
即使服务器没有发送,我也不明白我的客户如何耐心等待发送内容。
连接到服务器时,出现类似以下内容:
<mainTag>
<greeting>
</greeting>
(notice: no </mainTag>)
我的客户中没有任何东西能实现"if you see <tag>,wait for </tag>"
的逻辑(我自己写的都是白手起家的。)
以下是一些有关我如何读取服务器发送的内容的代码:
try (
SSLSocket socket = getSSLsocket(keystoreFile,keystorePass,keystorePass);
// ... Write-stuff removed,irrelevant to the question ...
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
) {
socket.startHandshake();
// ... Write-stuff removed,irrelevant to the question ...
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
}
}
private static SSLSocket getSSLsocket (String ksPath,String ksPass,String pkPass) {
SSLContext context = SSLContext.getInstance("TLS");
// ... Some key management stuff removed ...
SSLSocketFactory sslScktFactory = context.getsocketFactory();
return (SSLSocket)sslScktFactory.createSocket(hostFQDN,port);
}
特别是在调试过程中,我进入了while ((inputLine = in.readLine()) != null)
并且到达了</greeting>
,但是当我再次进入时,我看到它只是挂在那儿。
.readLine()
返回什么吗?如果是这样,为什么不打印?
或者,它没有返回任何东西?如果是这样,为什么.readLine()
不为空?