Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 191
#1

Socket Server, Client - Программирование Android

01.04.2016, 12:41. Просмотров 525. Ответов 9
Метки нет (Все метки)

Доброго времени суток. Решил разобраться с сокетами. Но почему-то сообщения не приходят...
Клиент:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
messsage = "Test"; 
                    client =null;     
                    dataOutputStream= null;
                    dataInputStream = null;
 
        Runnable runnable = new Runnable() {
            public void run() {
                try {
                client = new Socket("192.168.0.105", 1111); 
                client.setSoTimeout(20); 
                dataOutputStream = new DataOutputStream(client.getOutputStream()); 
                dataInputStream = new DataInputStream(client.getInputStream()); 
                dataOutputStream.writeUTF(messsage);
                } catch (UnknownHostException e) {
                    xy.setText(""+e);
                } catch (IOException e) {
                    xy.setText(""+e.getMessage());
                }
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
Сервер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Runnable runnable = new Runnable() {
            public void run() {
                try {
                    ServerSocket ss = new ServerSocket(1111); // создаем сокет сервера и привязываем его к вышеуказанному порту
                    Socket socket = ss.accept(); // заставляем сервер ждать подключений и выводим сообщение когда кто-то связался с сервером
                    // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиенту. 
                    InputStream sin = socket.getInputStream();
                    OutputStream sout = socket.getOutputStream();
                    // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
                    DataInputStream in = new DataInputStream(sin);
                    DataOutputStream out = new DataOutputStream(sout);
                    String line = null;
                    while(true) {
                        line = in.readUTF(); // [ожидаем пока клиент пришлет строку текста.
                        btn1.setText(line);
                    }
                } catch(Exception x) { btn1.setText(""+x); }
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
Я нуб в этом. Помогите пожалуйста. (И клиент и сервер на разных Android устройствах)
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2016, 12:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Socket Server, Client (Программирование Android):

Socket Android Client and Java Socket Server - Программирование Android
Доброго времени суток.Пытаюсь сделать простое клиент-серверное приложение. Клиент - приложение на Android устройстве. Сервер - Приложение...

TCP Socket Client - Программирование Android
Всем доброго времени суток. Пытаюсь открыть сокет между Android Client и сервером под виндой (когда то написал на билде, использую в...

Android, client-server - Программирование Android
Здравствуйте, раньше писал, что делаю приложение на диплом, что-то похожие на google maps, сейчас возник вопрос об авторизацие. ...

Android client <-Wi FI-> PC server - Программирование Android
Всем привет. Очень хочу реализовать такую штуку. Значит надо отправлять хотяб 1 байт с андроида на пк через WI Fi На ПК вполне знаком...

client/server для android phone <-> pc на java - Программирование Android
Написал клиент/сервер на java для передачи сообщений из телефона в комп. Клиент на телефон samsung galaxy fit gt-s5670 с Android 2.2.1,...

Socket server over 3g - Программирование Android
Привет. Хотел программу написать, сервер сокет, но что то в сети 3g не работает. Через домашний роутер с wifi и проброс портов все...

9
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
01.04.2016, 13:25 #2
den_droid, этот код вообще работать не будет.
Цитата Сообщение от den_droid Посмотреть сообщение
xy.setText(""+e);
Цитата Сообщение от den_droid Посмотреть сообщение
btn1.setText(line);
Приведёт к exception-у
0
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 191
01.04.2016, 13:30  [ТС] #3
YuraAAA, хм, а как тогда вывести полученные данные?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
01.04.2016, 14:23 #4
den_droid, https://github.com/koush/AndroidAsync например, с помощью этой штуки
0
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 191
01.04.2016, 14:48  [ТС] #5
YuraAAA, хорошо, а сам код у меня более менее правильный?
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
01.04.2016, 14:57 #6
ну если не сильно уходить в теорию, то можно пока что выкрутиться минимумом, что бы выводило в textview
Java
1
2
3
4
5
6
        btn1.post(new Runnable() {
            @Override
            public void run() {
                btn1.setText(line);
            }
        });
1
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 191
02.04.2016, 13:54  [ТС] #7
Паблито,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
btn1.post (new Runnable() {
            public void run() {
                try {
                    ServerSocket ss = new ServerSocket(1111); // создаем сокет сервера и привязываем его к вышеуказанному порту
                    Socket socket = ss.accept(); // заставляем сервер ждать подключений и выводим сообщение когда кто-то связался с сервером
                    // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиенту. 
                    InputStream sin = socket.getInputStream();
                    OutputStream sout = socket.getOutputStream();
                    // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
                    DataInputStream in = new DataInputStream(sin);
                    DataOutputStream out = new DataOutputStream(sout);
                    String line = null;
                    while(true) {
                        line = in.readUTF(); // [ожидаем пока клиент пришлет строку текста.
                        btn1.setText(line);
                    }
                } catch(Exception x) { btn1.setText(""+x); }
Ошибка: Android.OS.NetworkOnMainThreadException

Добавлено через 3 минуты
Добавил @Override - тоже самое.

Добавлено через 2 минуты
Паблито,
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
Runnable runnable = new Runnable() {
            public void run() {
                try {
                    ServerSocket ss = new ServerSocket(1111); // создаем сокет сервера и привязываем его к вышеуказанному порту
                    Socket socket = ss.accept(); // заставляем сервер ждать подключений и выводим сообщение когда кто-то связался с сервером
                    // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиенту. 
                    InputStream sin = socket.getInputStream();
                    OutputStream sout = socket.getOutputStream();
                    // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
                    DataInputStream in = new DataInputStream(sin);
                    DataOutputStream out = new DataOutputStream(sout);
                    
                    while(true) {
                        line = in.readUTF(); // [ожидаем пока клиент пришлет строку текста.
                        btn1.post(new Runnable() {
                            public void run() {
                        btn1.setText(line);
                        }
                        });
                    }
                } catch(Exception x) { btn1.setText(""+x); }
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
Ошибки не выдает, сейчас протестирую

Добавлено через 37 минут
Паблито, теперь, все работает. Но после 1 успешного приема данных, дальше прием не идет. Как решить эту проблему?

Добавлено через 22 часа 7 минут
Паблито, хорошо, у меня все получилось кроме одного. Как отключить клиента? При закрытии приложения сервер вылетает.
client.close();
Тоже вылетает.
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
02.04.2016, 13:57 #8
с какой ошибкой в логах вылетает, надо догадаться?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
02.04.2016, 14:15 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Паблито, den_droid, ой, а я догадываюсь с какой. Я же сразу об этом писал, почему меня никто не слушает.
Цитата Сообщение от den_droid Посмотреть сообщение
} catch(Exception x) { btn1.setText(""+x); }
1
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 191
02.04.2016, 14:58  [ТС] #10
YuraAAA, да, Вы абсолютно правы. Спасибо вам огромное!
0
02.04.2016, 14:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2016, 14:58
Привет! Вот еще темы с ответами:

Server->Client Обновление БД длинной строкой. Приходит не все отосланное - Программирование Android
Отправляю из Сишной проги по сокету, длинную строку с командами создания и обновления БД Sqlite на андроиде. При приеме вычитывается...

Теряются данные ответа Socket Server - Программирование Android
Здравствуйте! Динамические данные (данные которые сервер шлёт не по запросу на открытый поток клиента) не приходят на клиент. Точнее...

Server socket как ограничить число потоков - Программирование Android
Добрый день! Есть server socket, который ожидает подключение клиентов. Для каждого клиента создается свой поток. s...

HTTP Client для Android - Программирование Android
Доброго времени суток друзья. Столкнулся с такой проблемой. Нужно написать HTTP Client , я его вроде бы написал , но проблема в том ,что...


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

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

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