Как получить ответ все время с сервера по TCP на Android - PullRequest
0 голосов
/ 27 июля 2011

У меня есть небольшая программа, которая может отправлять запрос и получать ответ.

 but1.setOnClickListener(new Button.OnClickListener()
        {
            public void onClick(View v) {
                Socket socket=null;
                String mesg=edit1.getText().toString()+"\r\n";
            try {
                socket=new Socket("169.243.146.84",30000);
                //send information to server
                PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
                out.println(mesg);
                //receive information from server
                BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String mstr=br.readLine();
            if(mstr!=null)
            {
                text1.setText(mstr);
            }else
            {
                text1.setText("error");
            }

            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }catch(Exception e)
            {
                Log.e(DEBUG_TAG,e.toString());
            }
}
});

Когда я нажимаю кнопку, она отправляет и получает. Но я хочу, чтобы он постоянно получал ответ. Как сервер будет отправлять разную информацию каждые 10 секунд. Так что я могу использовать append () для setText.

Может кто-нибудь сказать мне, как это сделать?

Спасибо!

Ответы [ 2 ]

1 голос
/ 27 июля 2011

вам нужно запустить поток и зациклить его до тех пор, пока сокет не будет закрыт (или сервер отправит сообщение остановки).

new Thread(new Runnable() {
    public void run() {
        while (true) {
            String mstr=br.readLine();
            if (mstr == null) {
                break; // socket closed
            }
            if (mstr.equals("%QUIT%")) {
                break; // protocol specific end message
            }
            // do whatever you like with mstr
            // ....
        }
    }
}

Вам нужно добавить немного обработки исключений, и все будет хорошо. Сервер сможет общаться с клиентом в любое время и без каких-либо вопросов.

Единственным недостатком является то, что вам необходимо поддерживать соединение с сокетом во время обмена сообщениями. Теперь зачем это делать? Ну, представьте, у вас назначена встреча через 1 час. Вы предпочитаете смотреть на свои часы каждые 10 секунд или установить на них будильник, который сообщит вам за 1 час?

0 голосов
/ 27 июля 2011

Используйте TimerTask, который просыпается каждые 10 секунд и пытается прочитать информацию, если присутствует, или даже каждую секунду.Это не рекомендуется, хотя вы должны смотреть на C2DM для push-уведомлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...