等待服务器70秒

时间:2015-03-10 17:11:59

标签: android multithreading sockets tcp client

我是这个论坛的新人。我在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秒后回答,所以我需要等待一个控制器并听取服务器是否给我答复。 我该怎么做? 谢谢你的回答。

1 个答案:

答案 0 :(得分:0)

socket.setSoTimeout(70*1000);

所以,你的方法会很好。我在2009年做的第一款Android应用程序使用了这种方法。许多应用程序,架构师和团队讨厌它,并希望各种各样的AsyncTask绕着WRT处理它如何处理线程,并快速发展到几个月前我们的高价移动咨询公司签约放弃Async任务并转到线程模型。大声笑。他们使用Otto代替runOnUIThread,但是使用相同的差异。 祝你好运!