3

我是新手,如果我问愚蠢的问题,我很抱歉。
我必须与服务器建立套接字连接。
客户端(Android 设备)必须向服务器发送消息并等待确认消息。然后,如果服务器在 30 秒内没有收到来自客户端的任何消息,则发送一个 ack 消息请求。
我所做的是第一部分:客户端发送消息并读取响应。
我要问的是:客户端如何等待来自服务器的可能消息?
这是我写的代码:
在 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,那么我怎样才能等待服务器消息呢?
非常感谢您的任何建议。

4

1 回答 1

4

你不应该关闭流。当您关闭流时,您与服务器的通信将关闭。通常服务器通信发生在无限循环中。像这样的东西:

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.

于 2012-11-22T14:20:36.613 回答