Поддержание подключения с сервером

190
28 октября 2018, 01:10

Доброго времени суток.

Суть проблемы: есть однопоточный сервер, с которым android общается через сокеты. (Больше, чем один поток сделать нельзя, ибо сервер - это ESP'шка, или же nodeMCU)

На него (раз в 250 м/с или быстрее) нужно присылать всякий "мусор" по типу "windows:0", чтобы он не "отваливался" от wifi.

В самом приложении есть 4 кнопки. (Вперёд, назад, влево, вправо)

Нужно сделать так, чтобы при нажатии клавиши - на сервер отправлялись данные "servo:160" (не важно, но главное - те данные, которые нужны), а затем опять же отправлялся мусор. При "отжатии" клавиши - отправлялись, опять же, нужные денные, а затем шёл мусор. Как это сделать?

Есть код, который отправляет по сокетам данные серверу:

class myTask extends AsyncTask<Void, Void, Void>{
    String message_to_send = "";
    public myTask(String message) {
        this.message_to_send = message;
    }
    @Override
    protected Void doInBackground(Void... voids) {
    try {
            s = new Socket(ip_get.getText().toString(), 1000);
            printWriter = new PrintWriter(s.getOutputStream());
                printWriter.write(message_to_send);
                printWriter.flush();
                printWriter.close();
        s.close();
    }catch (IOException e){
    }
        return null;
    }
}

Код кнопок:

 turn_left.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction() == MotionEvent.ACTION_UP){
                    Return_servo();
                    return true;
                }
                if (event.getAction() == MotionEvent.ACTION_DOWN){
                   Turn_Left();
                    Toast.makeText(getApplicationContext(), "onDown", Toast.LENGTH_SHORT).show();
                    return true;
                }
                return false;
            }
        });
        turn_right.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction() == MotionEvent.ACTION_UP){
                    Return_servo();
                    return true;
                }
                if (event.getAction() == MotionEvent.ACTION_DOWN){
                    Turn_Right();
                    Toast.makeText(getApplicationContext(), "onDown", Toast.LENGTH_SHORT).show();
                    return true;
                }
                return false;
            }
        });
        stop_car.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction() == MotionEvent.ACTION_UP){
                    return true;
                }
                if (event.getAction() == MotionEvent.ACTION_DOWN){
                    Stop_Car();
                    Toast.makeText(getApplicationContext(), "onDown", Toast.LENGTH_SHORT).show();
                    return true;
                }
                return false;
            }
        });
        ride_car.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction() == MotionEvent.ACTION_UP){
                    Stop_Car();
                    return true;
                }
                if (event.getAction() == MotionEvent.ACTION_DOWN){
                    Ride_Car();
                    Toast.makeText(getApplicationContext(), "onDown", Toast.LENGTH_SHORT).show();
                    return true;
                }
                return false;
            }
        });

Методы, которые они вызывают, а так же метод отправки:

private void Ride_Car() {
    send_text(range_get.getText().toString());
}
private void Stop_Car(){
    send_text("0");
}
private void Turn_Left(){
    send_text("8");
}
private void Turn_Right() {
    send_text("9");
}
private void Return_servo(){
    send_text("7");
}
public void send_text(String message){
    myTask mt = new myTask(message);
    mt.execute();
}

Помогите, пожалуйста. 4-й день мучаюсь с этим....

READ ALSO
Где храниться история в IntelliJ IDEA?

Где храниться история в IntelliJ IDEA?

И как ее удалить? И если я закоммичу проект, то история попадет на GitHub?

248
Как реализовать открытие layout по нажатию ImageButton (см. рисунки)?

Как реализовать открытие layout по нажатию ImageButton (см. рисунки)?

Надо сделать так, чтобы при нажатии на ImageButton открывался(появлялся) layout с некоторыми элементамиКак это реализовать?

158
Android JSON или сериализация

Android JSON или сериализация

В моём приложении есть база данных, которую заполняет пользовательДелаю функцию сохранения на диск и передачи бд

180
Как выполнить Overriding в примере? И стоит ли вообще

Как выполнить Overriding в примере? И стоит ли вообще

У меня десяток методов с похожими функциямиСтоит ли для оптимизации перегружать десять методов от одного? И если да, подскажите верный способ...

181