Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 191
#1

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

01.04.2016, 12:41. Просмотров 637. Ответов 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
Доброго времени суток.Пытаюсь сделать простое клиент-серверное приложение....

TCP Socket Client
Всем доброго времени суток. Пытаюсь открыть сокет между Android Client и...

Android, client-server
Здравствуйте, раньше писал, что делаю приложение на диплом, что-то похожие на...

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

Client(android) - Server (PC) - Delphi
Здравствуйте. Подскажите как можно реализовать Client(android) - Server (PC) -...

client/server для android phone <-> pc на java
Написал клиент/сервер на java для передачи сообщений из телефона в комп. Клиент...

9
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 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
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 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
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,448
Завершенные тесты: 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
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,448
Завершенные тесты: 1
02.04.2016, 13:57 #8
с какой ошибкой в логах вылетает, надо догадаться?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
02.04.2016, 14:15 #9
Лучший ответ Сообщение было отмечено den_droid как решение

Решение

Паблито, 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
Привет! Вот еще темы с решениями:

Socket server over 3g
Привет. Хотел программу написать, сервер сокет, но что то в сети 3g не...

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

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

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


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

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

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