【问题标题】:How can the client stay waiting for a possible server message?客户端如何等待可能的服务器消息?
【发布时间】:2012-11-10 22:19:16
【问题描述】:

我是新手,如果我问愚蠢的问题,我很抱歉。
我必须与服务器建立套接字连接。
客户端(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,那么我该如何等待服务器消息?
非常感谢您的任何建议。

【问题讨论】:

标签: android sockets client inputstream


【解决方案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 停止通信退出循环。

【讨论】:

  • 感谢您的回答!我按照你告诉我的那样尝试了,但我只收到第一条消息,并且“bytesToRead”总是 = -1。我在这个答案中读到:link“读取 -1 并不意味着,”这次尝试没有数据存在,“它的意思是,“流已关闭,永远不会有任何数据,所以停止询问。 " 我不知道该怎么办!谢谢
  • 你确定服务器没有关闭连接吗?
  • 有办法知道吗?使用方法 isConnected()?
  • 嗯,试试看。我不知道:\
  • 我现在接受了你的问题,我终于发现是我的错误:我向服务器发送了一个比消息长度多一个字节的byteBuffer,所以服务器关闭了连接。谢谢回复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
相关资源
最近更新 更多