2014-11-20 105 views
0

我有android客户端和C++服务器,并且工作在ssl(TLS)连接。但对于每一条消息,我都必须打开新的SSL会话等。 我可以通过一个ssl套接字发送多封邮件吗?怎么样? 我试过重复使用我的单消息工作代码,如下所示。Android:通过sslsocket连接发送多个消息

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个写入请求将达到服务器的时候,我不从流中读取。

从一个套接字使用输入和输出流多重时间有没有问题? 我应该使用两个套接字 - 一个用于读取,一个用于写入?

帮助任何人。

回答

1

好吧,最后我找到了解决方案。 问题出在读,因为r.readLine()被阻塞,直到服务器关闭连接,所以在此之后,什么都不能发送。

现在客户端不在等待服务器关闭连接,但它检查消息是否完整。 喜欢倾向:

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

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