@CeBePHblY

Android работа с сокетами. Как получать данные с сервера?

Изучаю Android. Есть сервер наPython, он ждет поключения клиентов(клиенты тоже на Python), после подключения клиенты посылают команды сервера, а он в ответ присылает ответ(все отлично работает). Теперь задача заменить Python клиентов клиентов на Android. Подключение к серверу проиходит, он принимает от клиента команду "get", сервер посылает сразу ответ. Как мне получать в Android эти данные? И еще: я так понимаю, отправку команд и прием данных лучше вынести в отдельный поток?
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.net.Socket;
import java.net.UnknownHostException;

public class LoginActivity extends AppCompatActivity {

    Button buttonEnter;
    TextView textviewHeader;
    Handler handler;
    Socket client = null;
    DataOutputStream dataToServerStream = null;
    DataInputStream dataFromServerStream = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);


        buttonEnter = (Button) findViewById(R.id.buttonEnter);
        textviewHeader = (TextView) findViewById(R.id.textViewHeader);

        //хандлер класс
        class MyHandler extends Handler {

            WeakReference<LoginActivity> wrActivity;

            public MyHandler(LoginActivity activity) {
                wrActivity = new WeakReference<>(activity);
            }

            @Override
            public void handleMessage(android.os.Message msg){
                super.handleMessage(msg);
                LoginActivity activity = wrActivity.get();
                if (activity != null)
                    switch (msg.what){
                        case 0:
                            activity.textviewHeader.setText("Подключение к серверу...");
                            break;
                        case 1:
                            Toast toast = Toast.makeText(getApplicationContext(),msg.obj.toString(), Toast.LENGTH_LONG);
                            toast.show();
                        case 2:
                            activity.textviewHeader.setText("Войдите в приложение");
                            activity.buttonEnter.setEnabled(true);
                            break;
                    }
            }
        }
        handler = new MyHandler(this);

        //новый поток
        Thread threadConnect = new Thread(new Runnable() {
            Message msg;

            @Override
            public void run() {
                handler.sendEmptyMessage(0);
                //подключение к серверу
                try {
                    client = new Socket("localhost", 1605);
                    client.setSoTimeout(100);
                    dataToServerStream = new DataOutputStream(client.getOutputStream());
                    dataFromServerStream = new DataInputStream(client.getInputStream());

                    //отправка данных на сервер
                    dataToServerStream.writeUTF("get");
                    //чтение данных с сервера

                    msg = handler.obtainMessage(1,0,0, dataFromServerStream.readUTF());
                    handler.sendMessage(msg);

                } catch (UnknownHostException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    System.out.println("Got an IOException: " + e.getMessage());
                }
                handler.sendEmptyMessage(2);
            }
        });
        threadConnect.start();

        //обработчик нажатий
        View.OnClickListener OnClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                switch (view.getId()){
                    case R.id.buttonEnter:
                        textviewHeader.setText("ыааыаыаыа");
                        break;
                }
            }
        };

        buttonEnter.setOnClickListener(OnClickListener);
    }
}
  • Вопрос задан
  • 2429 просмотров
Пригласить эксперта
Ответы на вопрос 1
orcDamnar
@orcDamnar
Java, C/C++, Android SDK
ну как, если хотите с сокетами работать, то точно так же как и везде: парсить байты
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы