【问题标题】:Android: Sending multiple messages over a sslsocket connectionAndroid:通过 sslsocket 连接发送多条消息
【发布时间】:2015-01-19 00:23:32
【问题描述】:

我有带有工作 ssl (TLS) 连接的 android 客户端和 C++ 服务器。但是对于每条消息,我都必须打开新的 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 个写入请求到达服务器。

从一个套接字多次使用输入和输出流有什么问题吗? 我应该使用两个套接字 - 一个用于读取,一个用于写入吗?

帮助任何人。

【问题讨论】:

    标签: java android sockets session ssl


    【解决方案1】:

    好的,最后我自己找到了解决方案。 问题在于阅读,因为 r.readLine() 阻塞直到服务器关闭连接,所以在此之后无法发送任何内容。

    现在客户端不等待服务器关闭连接,而是检查消息是否完整。 像这样:

    while ((actRecieved = r.readLine()) != null) {
         response.append(actRecieved);
         if(actRecieved.endsWith("SomeEndMark")
             break;
    }
    

    希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-07-12
      • 1970-01-01
      • 2020-03-07
      • 2018-03-31
      • 1970-01-01
      • 2019-01-06
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多