Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Arion32
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 37
21.10.2016, 13:34     Чтение данных с сервера (TCP клиент) #1
Добрый день подскажите как реализовать чтение данных с сервера непрерывным потоком и выводить все в 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;
                }
            }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2016, 13:34     Чтение данных с сервера (TCP клиент)
Посмотрите здесь:

Android Реализация клиент сервера
Android TCP клиент под андроид
TCP/IP клиент Android
Android TCP клиент
Android разработка клиент-сервера Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2666 / 1677 / 158
Регистрация: 13.01.2012
Сообщений: 6,268
21.10.2016, 18:21     Чтение данных с сервера (TCP клиент) #2
Arion32, мало кода где сама отправка?
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
21.10.2016, 21:26     Чтение данных с сервера (TCP клиент) #3
Цитата Сообщение от Arion32 Посмотреть сообщение
чтение данных с сервера непрерывным потоком
Что под этим подразумевается? В любом случае данные с сервера будете получать порциями, например, содержание какого-нибудь файла или выборка из базы данных.
В своем приложении можете группировать получаемые данные и выводить удобным для вас способом.
Arion32
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 37
21.10.2016, 21:37  [ТС]     Чтение данных с сервера (TCP клиент) #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);
    }
}
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
21.10.2016, 22:07     Чтение данных с сервера (TCP клиент) #5
А сервер точно что-то отправляет?
Arion32
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 37
21.10.2016, 22:30  [ТС]     Чтение данных с сервера (TCP клиент) #6
да. в качестве сервера использую прогу hercules. Скачивал с гугл плей тср клиент - все работает. Может с выводом косяк какой то?
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
21.10.2016, 22:31     Чтение данных с сервера (TCP клиент) #7
Принимаемую строку в дебаге посмотрите или сохраните в логах
Arion32
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 37
21.10.2016, 23:27  [ТС]     Чтение данных с сервера (TCP клиент) #8
попробовал вписать
Java
1
System.out.println(r);
после строки 76
Java
1
r = new String(readData, "UTF-8");
Сейчас во время отправки с сервера вижу сообщение в дебаге I/System.out: b.
b - это то что я отправлял с сервера. Но почему на экране планшета не выводится это? И повторная и последующая посылка сообщений не проходит больше.
Получается можно отправить только один раз и то это не выводится(
Arion32
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 37
23.10.2016, 20:31  [ТС]     Чтение данных с сервера (TCP клиент) #9
помогите кто может
vxg
Модератор
 Аватар для vxg
2666 / 1677 / 158
Регистрация: 13.01.2012
Сообщений: 6,268
24.10.2016, 10:26     Чтение данных с сервера (TCP клиент) #10
Arion32, ваш код выглядит как шедевр изворотливости - нельзя выполнять сетевой обмен в GUI? - ок, андроид, я разделю весь обмен на куски и вынесу эти куски в таски, а таски буду дергать когда мне нужно из GUI, я тебя обхитрю! и вот у нас одна таска подключается и выдирает потоки, другая читает из потока, а третья пишет в него... идея гениальная и поражающая мое воображение, но я бы на вашем месте сделал две вещи:
1 попробовал провернуть обмен (коннект, передача, прием) в одной таске что бы убедится в том что вы действительно все правильно делаете
2 попробовать обычные OutputStream и InputStream
Arion32
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 37
24.10.2016, 12:56  [ТС]     Чтение данных с сервера (TCP клиент) #11
vxg, как сделать проще?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2016, 18:01     Чтение данных с сервера (TCP клиент)
Еще ссылки по теме:

Android TCP клиент в NDK
Android Создаем TCP сервер (на основе сервера MicroBridge LightWeight)
Android Пинг TCP сервера

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

Или воспользуйтесь поиском по форуму:
vxg
Модератор
 Аватар для vxg
2666 / 1677 / 158
Регистрация: 13.01.2012
Сообщений: 6,268
24.10.2016, 18:01     Чтение данных с сервера (TCP клиент) #12
Arion32, как НАЧАТЬ делать я написал
Yandex
Объявления
24.10.2016, 18:01     Чтение данных с сервера (TCP клиент)
Ответ Создать тему
Опции темы

Текущее время: 15:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru