android-客户端如何保持等待可能的服务器消息?

我是新手,如果我问哑巴问题,我感到抱歉.
我必须与服务器建立套接字连接.
客户端(Android设备)必须向服务器发送消息,并等待确认消息.然后,如果服务器在30秒钟内未从客户端收到任何消息,则发送请求确认消息的请求.
我所做的是第一部分:客户端发送消息并读取响应.
我要问的是:客户端如何等待服务器发出的可能消息?
这是我写的代码:

在onCreate方法中:

Thread myThread = new Thread(new myRunnable());
myThread.start();

这是myRunnable:

public class myRunnable implements Runnable{
  public void run(){
    try{
      Socket socket = new Socket(serverIp, serverPort);
      InputStream is = socket.getInputStream();
      OutputStream out = socket.getOutputStream();
      out.write(byteBuffer.array());
      out.flush();
      byte[] bbb = new byte[1024];
      // Receive message from server
      int bytesToRead= is.read(bbb);
      is.close();
      out.close();
      socket.close();

连续读取操作返回-1,那么如何保持等待服务器消息?
非常感谢您的任何建议.

解决方法:

您不应该关闭信息流.关闭流时,与服务器的通信也会关闭.通常,服务器通信发生在无限循环中.像这样:

public class myRunnable implements Runnable{
  public void run(){
    try{
      Socket socket = new Socket(serverIp, serverPort);
      InputStream is = socket.getInputStream();
      OutputStream out = socket.getOutputStream();
      out.write(byteBuffer.array());
      out.flush();
      byte[] bbb = new byte[1024];
      while (true) {
         // Read next message.
         bytesToRead = is.read(bbb);
         // handle message...
         // If you need to stop communication use 'break' to exit loop;
      }
      is.close();
      out.close();
      socket.close();

因此线程停止在bytesToRead = is.read(bbb)行上,直到服务器发送任何消息为止,此后它将以您想要的任何方式处理消息并返回读取下一条消息.如果需要停止通讯,请使用break退出循环.

上一篇:java-挂在org.apache.jk.common.JkInputStream.receive()上的JBOSS-IOException读取HTTP请求InputStream


下一篇:如何在kotlin android中用responseInputStream.read编写while循环–while((i = responseInputStream.read(byteContain