Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Arion32
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 172
1

Чтение данных с сервера (TCP клиент)

21.10.2016, 13:34. Просмотров 1260. Ответов 11
Метки нет (Все метки)

Добрый день подскажите как реализовать чтение данных с сервера непрерывным потоком и выводить все в TextView.
отправку на сервер получилось сделать, все хорошо. А вот с приемом немогу понять.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   @Override
            public void onClick(View view) {
                switch (view.getId()) {
                    case R.id.buttonEnter:
                        try {
                           
                            String sendText = editTextLogin.getText().toString();
                            byte[] buf = sendText.getBytes("UTF-8");
                            dataToServerStream.write(buf, 0, buf.length);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        break;
                }
            }
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2016, 13:34
Ответы с готовыми решениями:

TCP/IP клиент
Здравствуйте, Имеется хост, который слушает порт 50001, на андроиде написал такую функцию для...

TCP клиент
Доброго времени суток. Мне стало нужно написать простое android-приложение, которое соединяется по...

TCP клиент в NDK
Как реализовать TCP клиент используя андроид ndk на С++?? Я слышал, что у андроид такое же ядро как...

Как сделать клиент TCP IP?
Доброго времени суток! Очень нужна помощь в Java, т.к. совсем не имел с ней дел. Есть сервер на...

TCP клиент под Android
Доброго времени суток. Имеется TCP сервер под Windows, написанный на Delphi XE5, также имеется...

11
vxg
Модератор
3303 / 2096 / 331
Регистрация: 13.01.2012
Сообщений: 8,148
21.10.2016, 18:21 2
Arion32, мало кода где сама отправка?
0
Alexvp
97 / 77 / 8
Регистрация: 03.08.2014
Сообщений: 432
21.10.2016, 21:26 3
Цитата Сообщение от Arion32 Посмотреть сообщение
чтение данных с сервера непрерывным потоком
Что под этим подразумевается? В любом случае данные с сервера будете получать порциями, например, содержание какого-нибудь файла или выборка из базы данных.
В своем приложении можете группировать получаемые данные и выводить удобным для вас способом.
0
Arion32
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 172
21.10.2016, 21:37  [ТС] 4
Alexvp, vxg,
косяк. не то отправил.
Проблема в том что клиент не читает сообщения с сервера.

Что под этим подразумевается?
Получение порциями непрерывным потоком
помогите пожалуйста
сам код.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
import java.net.UnknownHostException;
 
 
public class MainActivity extends AppCompatActivity {
    Button buttonEnter;
    TextView textViewHeader;
    EditText editTextLogin;
    Socket client = null;
    DataOutputStream dataToServerStream = null;
    DataInputStream dataFromServerStream = null;
    String r = "";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        buttonEnter = (Button) findViewById(R.id.buttonEnter);
        textViewHeader = (TextView) findViewById(R.id.textViewHeader);
        editTextLogin = (EditText) findViewById(R.id.editTextLogin);
 
        class ConnectToServer extends AsyncTask<Void, Void, Void> {
            @Override
            protected Void doInBackground(Void... voids) {
                //подключение к серверу
                try {
                    client = new Socket("192.168.187.218", 40512);
                    dataToServerStream = new DataOutputStream(client.getOutputStream());
                    dataFromServerStream = new DataInputStream(client.getInputStream());
                    Log.i("Socket", "Start");
 
 
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    System.out.println("Got an IOException: " + e.getMessage());
                }
                return null;
            }
        }
 
        ConnectToServer Connect = new ConnectToServer();
        Connect.execute();
 
 
        class GetDataFromServer extends AsyncTask<Void, Void, Void> {
 
            @Override
            public Void doInBackground(Void... voids) {
                //чтение данных с сервера
                while (true) {
 
                    try {
 
                        byte[] readBuffer = new byte[5 * 1024];
                        int read = 0;
                        read = dataFromServerStream.read(readBuffer);
                        if (read != -1) {
                            byte[] readData = new byte[read];
                            System.arraycopy(readBuffer, 0, readData, 0, read);
                            try {
                                r = new String(readData, "UTF-8");
                            } catch (UnsupportedEncodingException e) {
                            }
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return null;
 
 
                }
            }
        }
        textViewHeader.setText(r);
        GetDataFromServer GetData = new GetDataFromServer();
        GetData.execute();
 
 
        //обработчик нажатий
        View.OnClickListener OnClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                switch (view.getId()) {
                    case R.id.buttonEnter:
                        try {
                            //отправка данных на сервер
                            String sendText = editTextLogin.getText().toString();
                            byte[] buf = sendText.getBytes("UTF-8");
                            dataToServerStream.write(buf, 0, buf.length);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        break;
                }
            }
        };
 
        buttonEnter.setOnClickListener(OnClickListener);
    }
}
0
21.10.2016, 21:37
Alexvp
97 / 77 / 8
Регистрация: 03.08.2014
Сообщений: 432
21.10.2016, 22:07 5
А сервер точно что-то отправляет?
0
Arion32
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 172
21.10.2016, 22:30  [ТС] 6
да. в качестве сервера использую прогу hercules. Скачивал с гугл плей тср клиент - все работает. Может с выводом косяк какой то?
0
Alexvp
97 / 77 / 8
Регистрация: 03.08.2014
Сообщений: 432
21.10.2016, 22:31 7
Принимаемую строку в дебаге посмотрите или сохраните в логах
0
Arion32
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 172
21.10.2016, 23:27  [ТС] 8
попробовал вписать
Java
1
System.out.println(r);
после строки 76
Java
1
r = new String(readData, "UTF-8");
Сейчас во время отправки с сервера вижу сообщение в дебаге I/System.out: b.
b - это то что я отправлял с сервера. Но почему на экране планшета не выводится это? И повторная и последующая посылка сообщений не проходит больше.
Получается можно отправить только один раз и то это не выводится(
0
Arion32
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 172
23.10.2016, 20:31  [ТС] 9
помогите кто может
0
vxg
Модератор
3303 / 2096 / 331
Регистрация: 13.01.2012
Сообщений: 8,148
24.10.2016, 10:26 10
Arion32, ваш код выглядит как шедевр изворотливости - нельзя выполнять сетевой обмен в GUI? - ок, андроид, я разделю весь обмен на куски и вынесу эти куски в таски, а таски буду дергать когда мне нужно из GUI, я тебя обхитрю! и вот у нас одна таска подключается и выдирает потоки, другая читает из потока, а третья пишет в него... идея гениальная и поражающая мое воображение, но я бы на вашем месте сделал две вещи:
1 попробовал провернуть обмен (коннект, передача, прием) в одной таске что бы убедится в том что вы действительно все правильно делаете
2 попробовать обычные OutputStream и InputStream
0
Arion32
5 / 5 / 1
Регистрация: 17.10.2016
Сообщений: 172
24.10.2016, 12:56  [ТС] 11
vxg, как сделать проще?
0
vxg
Модератор
3303 / 2096 / 331
Регистрация: 13.01.2012
Сообщений: 8,148
24.10.2016, 18:01 12
Arion32, как НАЧАТЬ делать я написал
0
24.10.2016, 18:01
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2016, 18:01

Пинг TCP сервера
У меня есть TCP сервер под Windows и TCP клиент на андроид. Я устанавливаю между ними соединение и...

Создаем TCP сервер (на основе сервера MicroBridge LightWeight)
Добрый день, Уважаемые разработчики! Помогите пожалуйста, пытаюсь передать данные между ардуино и...

Реализация клиент сервера
Здравствуйте! Нашел все таки тему для своего дипломного проекта - система тестирования знаний с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.