vanesxl
@vanesxl

Почему данные приходят не полностью?

дравствуйте, реализовываю клиент серверное приложение.
Делаю все по примеру тут
Но почему то если с сервера передавать данные размером 150килобайт, данные не передаются до конца клиенту, но зато почему то в android studio в консоле атладки появляется возможность вводить данные с клавиатуры, в чем может быть причина?
sdfsdfk.jpg
1 данные которые пришли не полностью.
2 символы вводил с клавиатуры
Вот код клиента:
import android.os.AsyncTask;
import android.util.Log;

import java.net.Socket;

public class Client {

    public static String command;
    AsyncClient asyncClient;

    public void setCommand(String command) {
        this.command = command;
        asyncClient = new AsyncClient();
        asyncClient.execute();
    }

    ////////////////////////////////////////////////////////
    class AsyncClient extends AsyncTask<Void, Void, Void> {

        Socket s;

        @Override
        protected void onPreExecute(){
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... params) {
            try {
                s = new Socket("172.16.16.11",1122);
                //String msg = "hi server";
                s.getOutputStream().write(command.getBytes()); //посылаем команду на сервер
                byte[] buf = new byte[64*1024];
                int r = s.getInputStream().read(buf);
                String data = new String(buf,0,r); //строка от сервера

                Log.d("test", "Сообщение сервера: " + data);

                buf = new byte[500*1024];
                s.getOutputStream().write("ok".getBytes()); //говорим серверу что подтверждение полученно

                r = s.getInputStream().read(buf);
                //r = s.getInputStream().read();
                String xml = new String(buf,0,r); // принимаем большие данные
                Log.d("test",xml);


                s.close();
                s = null;
            }catch (Exception e){
                Log.d("test","Произошла ошибка: "+e);
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void resuld){
            super.onPostExecute(resuld);
        }
    }
}

Заранее большое спасибо!
  • Вопрос задан
  • 301 просмотр
Пригласить эксперта
Ответы на вопрос 1
gadfi
@gadfi
https://gamega.org
извините что не много не по вопросу, но зачем вам сокеты и прочий хардкор ? зачем все это делать руками, вы же на вход ждете xml, так используйте retrofit он и с xml хорошо дружит.
А если и сервер пишите вы так прочитайте про REST и шлите json
Ответ написан
Ваш ответ на вопрос

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

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