我有Android客户端和C ++服务器与工作ssl(TLS)连接。但是对于每条消息我都要打开新的ssl会话等等。 我可以通过一个ssl套接字发送多条消息吗?怎么样? 我已经尝试重用我的单消息工作代码,如下所示。
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(sslSocket.getOutputStream()));
w.write(request, 0, request.length());
w.flush(); // this works (server got data)
BufferedReader r = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));
StringBuilder response = new StringBuilder();
String actRecieved = null;
while ((actRecieved = r.readLine()) != null) {
response.append(actRecieved);
}
Log.d("TEST", "one: " + response.toString()); // this works (server send data, I read it)
request = "some special request 2";
w.write(request, 0, request.length());
w.flush(); // this does not work, no data went to server, but no error occured
actRecieved = null;
response = new StringBuilder();
while ((actRecieved = r.readLine()) != null) {
response.append(actRecieved);
}
Log.d("TEST", "two: " + response.toString()); // this does not work as well, because server is not send any data
那么,问题出在哪里?有谁能告诉我?
更新
我刚刚发现当我不从流中读取时,有2个写请求将到达服务器。
从一个套接字使用输入和输出流多个时间有什么问题吗? 我应该使用两个插座 - 一个用于读取,一个用于写入?
帮助任何人。
答案 0 :(得分:1)
好的,最后我自己找到了解决方案。 问题在于阅读,因为 r.readLine()被阻止,直到服务器关闭连接,因此在此之后无法发送任何内容。
现在客户端没有等待服务器关闭连接,但它会检查消息是否完整。 像这样:
while ((actRecieved = r.readLine()) != null) {
response.append(actRecieved);
if(actRecieved.endsWith("SomeEndMark")
break;
}
希望这会对其他人有所帮助。