在我的应用程序中,我使用套接字连接与服务器进行通信。一切正常,我可以毫无问题地从服务器发送/接收数据。没有,但有一个。服务器有一个特定的选项/响应,而不是让连接保持打开状态大约 30 秒。服务器立即发送回复,但它保持连接打开,因此应用程序卡在那里显示“等待”消息,因为我似乎无法弄清楚如何在不等待服务器的情况下关闭连接/输入流关闭它。
有没有办法读取缓冲区接收到的每个字符,并且一旦找到字符(例如“*”),缓冲区就应该关闭,并且与服务器的连接也应该关闭。
有什么帮助吗?
最佳答案
您需要在客户端和服务器之间管理它。一种方法是 HTTP 分块。 HTTP 分块首先发送消息长度,然后发送消息数据。或者,如果您的情况如此,如果您知道一个“神奇”字节通知客户端连接可以关闭,您可以逐一读取数据,当您到达终结器字节时,您可以完成读取并关闭连接。否则,应用程序将卡在 input.read()
中,直到连接超时或新字节到达
InputStream input = ....;
ByteArrayOutputStream bo = new ByteArrayOutputStream();
while (true){
int singlebyte = input.read();
if (singlebyte == -1) break; //stream ends
bo.write(singlebyte);
if (singlebyte == '*'){
//the byte you are wating. at this point, you can break loop. or continue to read
bo.write(singlebyte);
byte data[] = bo.toByteArray();
}
}
关于java - Android 套接字流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33744467/