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

Socket Server, Client

01.04.2016, 12:41. Просмотров 709. Ответов 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 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) -...

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
2767 / 2198 / 744
Регистрация: 12.05.2014
Сообщений: 7,718
Завершенные тесты: 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
2767 / 2198 / 744
Регистрация: 12.05.2014
Сообщений: 7,718
Завершенные тесты: 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

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

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

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


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

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

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