等待服务器 70 秒

Wait server for 70 seconds

我是这个论坛的新人。我用一个线程在 Android 中创建了一个 TCP 客户端。此代码适用于我的应用程序:

  class TCPClient extends Thread
 {
     String add;

     public TCPClient(String IPa)
     {
       add=IPa;
     }

     public void run()
     {
         try
         {
             InetAddress serverAddr = InetAddress.getByName(add);
             socket = new Socket(serverAddr, SERVERPORT);

             //write part: i write to server
             PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
             out.print("INIT");
             out.flush();

            //read part: I receive a message from server

            byte[] bytes = new byte[1000];


             StringBuilder x = new StringBuilder();

             int numRead = 0;
             if ((numRead = socket.getInputStream().read(bytes)) >= 0)
             {
               x.append(new String(bytes, 0, numRead));
             }

             if(x.toString().equals("INIT_ACK"))
                 //position_req();
              getActivity().runOnUiThread(new Runnable() {

                  public void run()
                  {
                   Toast.makeText(getActivity().getApplicationContext(),"Connesso",Toast.LENGTH_LONG).show();

                  }
              });
         }

         catch (UnknownHostException e) {
             e.printStackTrace();
         } catch (IOException e) {
             e.printStackTrace();
         } catch (Exception e) {
             e.printStackTrace();
         }


     }

但我有这个问题:服务器可能会在 70 秒后回复,所以我需要放置一个等待控件并监听服务器是否向我发送回复。 我该怎么做? 谢谢你的回答。

socket.setSoTimeout(70*1000);

所以,您的方法会很有效。我在 2009 年开发的第一个 Android 应用程序使用了这种方法。许多应用程序、架构师和团队都讨厌它并想要 AsyncTask,它在 WRT 上对它如何处理线程进行了各种失败,并快进到几个月前,当时我们签约的高价移动咨询公司放弃了 Async 任务并转而使用线程模型。哈哈。他们使用 Otto 而不是 runOnUIThread,但差异相同。 祝你好运!