簡體   English   中英

Android:通過sslsocket連接發送多條消息

[英]Android: Sending multiple messages over a sslsocket connection

我有具有工作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個寫入請求將到達服務器。

使用來自一個套接字的輸入和輸出流的多重時間是否有任何問題? 我應該使用兩個套接字嗎?一個用於讀取,另一個用於寫入?

幫助任何人。

好的,最后我自己找到了解決方案。 問題在於讀取,因為r.readLine()在服務器關閉連接之前一直處於阻塞狀態,因此在此之后什么也不能發送。

現在客戶端不再等待服務器關閉連接,而是檢查消息是否完整。 像這樣:

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

希望這對其他人有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM