gpt4 book ai didi

java - Android:通过 sslsocket 连接发送多条消息

转载 作者:太空宇宙 更新时间:2023-11-03 14:12:49 24 4
gpt4 key购买 nike

我有 android 客户端和 C++ 服务器,可以使用 ssl (TLS) 连接。但是对于每条消息,我都必须打开新的 ssl session 等等。我可以通过一个 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 个写入请求将到达服务器。

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

帮助任何人。

最佳答案

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

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

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

希望这对其他人有帮助。

关于java - Android:通过 sslsocket 连接发送多条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27051491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com