Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
sirik2012
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 45
#1

Отправка пакета (UDP) - Программирование Android

27.02.2014, 17:28. Просмотров 2562. Ответов 10
Метки нет (Все метки)

День добрый

Как организовать передачу пакета (UDP) из любого участка кода? Имеется в виду отправка пакета из любой Активити.

Пробовал делать так: создал класс и объявил в нем public процедуру, но получаю ошибку на строке №13:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    public void send_msg(String msgS) {
        try
        {
 
        InetAddress serv_addr = InetAddress.getByName("172.16.0.109");
 
        DatagramSocket sock = new DatagramSocket();
 
        byte [] buf = (msgS).getBytes();
        
        DatagramPacket pack = new DatagramPacket(buf, msgS.length(), serv_addr, 8888);
 
        sock.send(pack);
 
        sock.close();
        
        for (int i=0; i<buf.length;i++) buf[i]=0;
        Log.i("UDP", "Send OK");
    }
    catch (Exception e){
        Log.d("UDP", "Error: "+e);
    }
Может быть есть какое либо другое решение?

Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2014, 17:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Отправка пакета (UDP) (Программирование Android):

Данные из принятого UDP пакета
Как вытащить данные из принятого UDP пакета? Есть буфер, например на 100 байт....

Проверить установку пакета
Добрый день всем! Меня интересует такой вопрос, у меня есть приложение и в...

Ошибка подписи пакета
Здравствуйте! Не получается подписать пакет, делаю так контекстное...

Разное имя пакета и приложения
Импортировал проект. В манифесте указано название...

Распаковка ресурсов из пакета на устройство
Добрый день. Можно ли создать апк файл при запуске которого будет извлекать из...

Контрольная сумма TCP пакета
Как вычислить контрольную сумму отправляемого TCP пакета на сервер? Ну например...

10
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
27.02.2014, 18:23 #2
sirik2012, ошибку какую? NetworkOnMainThreadException?
0
sirik2012
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 45
27.02.2014, 18:24  [ТС] #3
Да, именно она
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
27.02.2014, 18:32 #4
sirik2012, так, хорошо. Эта ошибка появляется, если мы лезем в интернет из UI потока. 2 варианта:
1. Заглушить с помощью Policy эту ошибку (плохо!)
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class DataProxy {
    private static DataProxy instance;
 
    //Singleton
    public static DataProxy getInstance() {
        if (instance == null) {
            instance = new DataProxy();
        }
        return instance;
    }
 
    private DataProxy(){}
 
    public void sendAsync(final String message) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try
                {
 
                    InetAddress serv_addr = InetAddress.getByName("172.16.0.109");
 
                    DatagramSocket sock = new DatagramSocket();
 
                    byte [] buf = (message).getBytes();
 
                    DatagramPacket pack = new DatagramPacket(buf, message.length(), serv_addr, 8888);
 
                    sock.send(pack);
 
                    sock.close();
 
                    for (int i=0; i<buf.length;i++) buf[i]=0;
                    Log.i("UDP", "Send OK");
                }
                catch (Exception e){
                    Log.d("UDP", "Error: " + e);
                }
            }
        }).start();
 
    }
 
}
Вызов:

Java
1
DataProxy.getInstance().sendAsync("");
Добавлено через 43 секунды
Ну и опять же. Thread можно заменить на AsyncTask. Можно добавить Callback-интерфейс для возврата результата.
0
sirik2012
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 45
27.02.2014, 18:35  [ТС] #5
Я пробовал делать просто через Thread, но результата не дало( Завтра попробую Ваш метод
Кстати, а инициализировать класс и "убивать" надо когда? Перед вызовом метода отправки или единожды при инициализации проекта?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
27.02.2014, 18:38 #6
sirik2012, какой? DataProxy? Он будет инициализирован один раз и жить всё время за счёт static-контекста
0
sirik2012
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 45
27.02.2014, 18:40  [ТС] #7
Я правильно понял, что это класс надо инициализировать в главном Активити так:
PHP
1
DataProxy DataProxy = new DataProxy();
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
27.02.2014, 18:45 #8
sirik2012, не надо singleton

Он будет порождён ровно 1 раз при вызове getInstance(), последующие вызовы getInstance() будут обращаться уже к существующему единственному экзмепляру.
0
sirik2012
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 45
27.02.2014, 18:46  [ТС] #9
Понятно, спасибо. Завтра буду пробовать.

зы/ где можно прочитать про "ОЗЫ" ООП? Ранее с java не встречался к сожалению
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
27.02.2014, 18:51 #10
sirik2012, я бы порекомендовал Вам Шилдт "Java. Руководство для начинающих".
0
sirik2012
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 45
28.02.2014, 10:51  [ТС] #11
Спасибо за пример кода, все работает просто отлично!
0
28.02.2014, 10:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2014, 10:51
Привет! Вот еще темы с решениями:

Android Studio - ошибка разбора пакета
Добрый день! Подскажите пожалуйста, почему возникает ошибка разбора- &quot;Ошибка...

Как получить layout с другого пакета?
Здравствуйте, делаю скин для приложения, вопрос состоїт в том могу ли я взять...

Подкючение пакета com.google.android.maps
Доброго времени суток. Столкнулся с проблемой, никак не могу подключить пакет...

Добавить папку в середину имени пакета
Всем привет! Столкнулся с интересной проблемой: надо сменить имя пакета, и все...


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

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

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