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

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

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

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

27.02.2014, 17:28. Просмотров 2222. Ответов 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 пакета - Программирование Android
Как вытащить данные из принятого UDP пакета? Есть буфер, например на 100 байт. Принимаю к примеру 37 байт, о чем говорит pack.getLength() ....

Ошибка подписи пакета - Программирование Android
Здравствуйте! Не получается подписать пакет, делаю так контекстное меню-&gt;Android tools-&gt;Export Signed Application Package, в результате...

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

Распаковка ресурсов из пакета на устройство - Программирование Android
Добрый день. Можно ли создать апк файл при запуске которого будет извлекать из себя файлы по определенному пути? Качать из интернета данные...

Разное имя пакета и приложения - Программирование Android
Импортировал проект. В манифесте указано название com.droidmatter.taskbear.app.MainActivity а в project explorer название MainActivity ....

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

10
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 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
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 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
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 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
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 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
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 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
Всем привет! Столкнулся с интересной проблемой: надо сменить имя пакета, и все было бы не так плохо, если небыло бы необходимости...

Что такое инсталяция пакета в андроиде? - Программирование Android
Кто-нибудь находил инфу о том что такое инсталяция пакета в андроиде? После винды привык, что инсталяция - это в первую очередь...

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

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


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

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

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