Ошибка Android: соединение восстанавливается после чтения буферизированного читателя - PullRequest
0 голосов
/ 02 июля 2019

Я использую метод под названием registerDevice() в коде моего приложения для Android для отправки и получения определенных данных, которые содержат несколько строк.Но я получаю эту ошибку:

W / System.err: java.net.SocketException: сброс соединения

public void registerDevice(){
    final Handler handler = new Handler();
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {

            try {
                Socket s = new Socket(gateway, 1234);
                OutputStream out = s.getOutputStream();
                PrintWriter output = new PrintWriter(out);
                BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
                output.println("hello world\r\n");
                output.flush();
                StringBuffer stringBuffer = new StringBuffer("");
                String line = null;
                while ((line = input.readLine()) != null) {
                    stringBuffer.append(line);
                }
                final String st = line.substring(5);
                handler.post(new Runnable() {
                    @Override
                    public void run() {

                        if (st.trim().length() != 0)
                            Toast.makeText(getApplicationContext(),st,Toast.LENGTH_LONG).show();
                    }
                });

                output.close();
                out.close();
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

    thread.start();
}

ОБНОВЛЕНИЕ: Я изменил код на это:

                Socket s = new Socket(gateway, 1234);
                OutputStream out = s.getOutputStream();
                PrintWriter output = new PrintWriter(out);
                BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
                output.println("hello world\r\n");
                output.flush();
                final String st = input.readLine();
                handler.post(new Runnable() {
                    @Override
                    public void run() {

                        if (st.trim().length() != 0)
                            Toast.makeText(getApplicationContext(),"st",Toast.LENGTH_LONG).show();
                    }
                });

                output.close();
                out.close();
                s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

Я все еще получаю исключения для "final String st = input.readLine ();"линия.Я должен получить MAC-адрес от сервера, а затем сервер закрывает соединение. Я проверил сервер, и в этом нет ничего плохого, он закрывает соединение ПОСЛЕ того, как отправляет мне MAC.

1 Ответ

0 голосов
/ 02 июля 2019

Ребята, я нашел проблему, это был пакет, который я отправлял, я просто изменил outout.println () на output.write (), так что теперь сервер распознал мою команду и отправил нужные мне данные, которые привели к моему вводу поток не пустой и избегает исключений.

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