我有一个小的J2ME应用程序,应该发送一些字节到套接字和读取响应。但是,当我关闭OutputStrean时,套接字也会关闭,并且我无法读取响应。我想我可以尝试OutputStream.flush();,但它什么也不起作用。下面是应该从OutputStream读取数据的readAll()方法:
public final static String readAll(InputStream d) throws IOException {
ByteArrayOutputStream res = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int length;
while ((length = d.read(bytes)) != -1){
res.write(bytes, 0, length);
}
return new String(res.toByteArray(), "UTF-8");
}发布于 2020-05-02 02:12:24
您通常会希望有一个在后台运行的线程来实际处理数据的发送和接收。
接收到的数据应该提供某种方法来确定该特定数据块何时终止。例如,服务器可能会发回:
(long)length+(byte[])data
因此,从流中读取8个字节+不管长度是多少,然后您将使用这些数据构造一个表示该消息的对象,而您的另一个线程将读取该数据以决定它想要发送什么数据。
为了将数据发送出去,您可以有效地进行相反的操作,使用一个单独的线程使用表示要发送的消息的对象。
这些被称为消息队列,您可以在这里阅读更多信息:https://en.wikipedia.org/wiki/Message_queue
https://stackoverflow.com/questions/58174132
复制相似问题