java - Android 套接字流

标签 java android sockets

在我的应用程序中,我使用套接字连接与服务器进行通信。一切正常,我可以毫无问题地从服务器发送/接收数据。没有,但有一个。服务器有一个特定的选项/响应,而不是让连接保持打开状态大约 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/

相关文章:

android - SearchView(不在工具栏中)如何显示全屏下拉列表

java - 客户端可以在没有请求的情况下获得 servlet 的响应吗?

java - Android appcompat_v7错误

android - 无法开始工作 Android 模拟器 Jenkins

c++ - 如何将十六进制存储在数组中? C++ 多线程

C++ winsock 奇怪的错误

linux - 读取是否保证在数据可用时立即返回?

java - JDK 17 : Switch statement causes java. lang.VerifyError:操作数堆栈上的类型错误

java - 将 XML 字符串拆分为属性

Android R Id 输入文件