Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> udp пакет принимается несколько раз 
:(
    Опции темы
nmn
Дата 16.4.2011, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



здравствуйте

почему то некоторые udp пакеты получаются по два раза
Код

byte[] buf = new byte[256];
        try {
            DatagramSocket sr = new DatagramSocket(Program.port, localAddress);

            DatagramPacket pct = new DatagramPacket(buf, buf.length);
            while (true) {
                sr.receive(pct);
                String s = new String(buf, pct.getOffset(), pct.getLength());

                synchronized (Program.lock) {
                    System.out
                            .println(s + " from " + pct.getAddress()
                                    + " Thread name "
                                    + Thread.currentThread().getName());
                }
            }

это принимающая сторона

Код

DatagramSocket ss = new DatagramSocket(0,
                                addrs.getAddress());
                        ss.setBroadcast(true);

                        sendSockets.add(ss);
                        broadcastAddresses.add(addrs.getBroadcast());

//----------------------------------------------------------------------------------

byte[] b = new byte[0];
                    DatagramPacket p = new DatagramPacket(b, b.length);
                    p.setAddress(broadcastAddresses.get(j));
                    p.setPort(PORT);

                    String s = new Integer(k++).toString();
                    System.out.println(" " + s);
                    b = s.getBytes();
                    p.setData(b);

                    sendSockets.get(j).send(p);

это отправляющая сторона, там перечисляются все адаптеры и все адреса на них

вот лог отправки получения
Код

Sending broadcast to /127.255.255.255 0
Sending broadcast to /5.255.255.255 1
Sending broadcast to /192.168.0.255 2
Sending broadcast to /192.168.253.255 3

Opening socket on 127.0.0.1
Opening socket on 5.196.10.111
Opening socket on 192.168.0.123
Opening socket on 192.168.253.5
0 from /127.0.0.1 Thread name /127.0.0.1
1 from /5.196.10.111 Thread name /5.196.10.111
2 from /192.168.0.123 Thread name /192.168.0.123
2 from /192.168.0.123 Thread name /192.168.0.123
3 from /192.168.253.5 Thread name /192.168.253.5
3 from /192.168.253.5 Thread name /192.168.253.5


почему то с адресов которые находятся на wlan и на openvpn адаптерах udp пакет принимается дважды
PM Skype   Вверх
Artemon
Дата 16.4.2011, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Сразу скажу - ваш код не смотрел.

Протокол Udp не предполагает механизма который следит за отправленными пакетами, это вам перидется делать вручную, добавля в пакет что-то типа номера пакета и сессии, и повторно полученные пакеты не учитывать.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
nmn
Дата 16.4.2011, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



ладно теряться может, а откуда может взяться повторный пакет?
причем тут все происходит локально, т.е. на одном хосте запущен и тот кто отправляет пакеты и тот кто их принимает

Это сообщение отредактировал(а) nmn - 16.4.2011, 16:11
PM Skype   Вверх
Artemon
Дата 16.4.2011, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Если все эксперименты вы проводите на локальном ПК, то проблем вообще не должно быть, видимо в логике проблема. А по поводу дублирования, вот в этой статейке видел: http://www.nestor.minsk.by/kg/1999/23/kg92310.html


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
nmn
Дата 16.4.2011, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



я там нашел только упоминание о дублировании, ну да не в этом суть

дублирование очень регулярное, это не какие то проблемы в сети, это просто почему то происходит smile и именно с адресов, один из которых находится на wlan адаптере, а второй на openvpn адаптере, почему то дублирования не происходит с loopback адаптера и с hamachi

проблема не появляется когда отправитель и получатель находятся на разных хостах, что вобщем то и является основным применением, так что проблему можно заморозить

Добавлено через 4 минуты и 21 секунду
в логике проблем быть не должно, все отправки обрабатываются одинаково, а проблемы возникают только на некоторых

Код

for(AdapterAddress addrs:<all adapter addresses>)
DatagramSocket ss = new DatagramSocket(0,
                                addrs.getAddress());
                        ss.setBroadcast(true);
                        sendSockets.add(ss);
                        broadcastAddresses.add(addrs.getBroadcast());
}
//----------------------------------------------------------------------------------

for(int i=0;i<sendSockets.size();++i) {
byte[] b = new byte[0];
                    DatagramPacket p = new DatagramPacket(b, b.length);
                    p.setAddress(broadcastAddresses.get(j));
                    p.setPort(PORT);
                    String s = new Integer(k++).toString();
                    System.out.println(" " + s);
                    b = s.getBytes();
                    p.setData(b);
                    sendSockets.get(j).send(p);
}

добавил обрамляющие циклы чтобы понятнее было что происходит
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.