Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отправка сообщения udp 
V
    Опции темы
4eJIoBekMoJIekyJIa
Дата 27.5.2008, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ну просто у меня есть несколько клиентов, recvfrom о котором я писал выше нужен чтобы установить соединение, после этого сервер должен отправить всем подключенным клиентам сообщение(скорее всего широковещательное), дальше клиенты отвечают, мне нужно определить кто первым ответил, для этого я и хочу использовать select.
ЗЫ: когда я отправляю бродкаст он на мой комп не приходит?Можноли как-нибудь сделать чтобы приходило? Если нет, то не понятно как тестить...

Это сообщение отредактировал(а) 4eJIoBekMoJIekyJIa - 27.5.2008, 03:40
--------------------
PM MAIL   Вверх
MAKCim
Дата 27.5.2008, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(4eJIoBekMoJIekyJIa @  27.5.2008,  00:08 Найти цитируемый пост)
дальше клиенты отвечают, мне нужно определить кто первым ответил, для этого я и хочу использовать select.

через select() ты никак не определишь, кто ответил первым
Цитата(4eJIoBekMoJIekyJIa @  27.5.2008,  00:08 Найти цитируемый пост)
Можноли как-нибудь сделать чтобы приходило?

нет
Цитата(4eJIoBekMoJIekyJIa @  27.5.2008,  00:08 Найти цитируемый пост)
Если нет, то не понятно как тестить...

раскидать клиентов по разным портам и работать через loopback-интерфейс

Добавлено через 33 секунды
а вообще не мешало бы услышать задачу полностью
что на входе, что на выходе


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
4eJIoBekMoJIekyJIa
Дата 27.5.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Задача такая: есть бабушка(сервер) которая кидает зерна, и n воробьев, которые хотят их схватить(клиенты), если воробей схватил зерно, то следующий розыгрыш он пропускает.

Сначала я реализовал через потоки, но преп сказал что если он захочет запустить 1000 клиентов то столько потоков не создастся, и посоветовал делать через бродкаст всё в одном потоке.

Цитата(MAKCim @  27.5.2008,  09:17 Найти цитируемый пост)
через select() ты никак не определишь, кто ответил первым


потомучто когда выполниться селект уже может прийти несколько ответов? А как тогда определить кто первый?


Цитата(MAKCim @  27.5.2008,  09:17 Найти цитируемый пост)
раскидать клиентов по разным портам и работать через loopback-интерфейс


а это как?

Это сообщение отредактировал(а) 4eJIoBekMoJIekyJIa - 27.5.2008, 11:14
--------------------
PM MAIL   Вверх
MAKCim
Дата 27.5.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



4eJIoBekMoJIekyJIa, 
где конкретно будут располагаться клиенты? (хост, LAN, глобальная сеть)



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
4eJIoBekMoJIekyJIa
Дата 27.5.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



все на одном компе

Это сообщение отредактировал(а) 4eJIoBekMoJIekyJIa - 27.5.2008, 12:12
--------------------
PM MAIL   Вверх
MAKCim
Дата 27.5.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



4eJIoBekMoJIekyJIa, 
1. что мешает вызывать recvfrom() до получения ответов ото всех клиентов?
первый вызов recvfrom() будет соответствовать первому ответившему клиенту
2. на хосте широковещательную (и многоадресную) передачу организовать нельзя



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
4eJIoBekMoJIekyJIa
Дата 27.5.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ладно. А одновременно отправить как-нибудь подругому можно?

Это сообщение отредактировал(а) 4eJIoBekMoJIekyJIa - 27.5.2008, 12:34
--------------------
PM MAIL   Вверх
MAKCim
Дата 27.5.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(4eJIoBekMoJIekyJIa @  27.5.2008,  12:33 Найти цитируемый пост)
Ладно. А одновременно отправить как-нибудь подругому можно?

нет, т. к в рамках хоста все клиенты будут "сидеть" на разных портах


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
4eJIoBekMoJIekyJIa
Дата 27.5.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



слушай смотри если есть такой код
Код

    conn_sock = socket(AF_INET, SOCK_DGRAM, 0);

    bzero(&srv_addr, sizeof(srv_addr));
    srv_addr.sin_family = AF_INET;
    srv_addr.sin_port = 11000;
    
    if(inet_aton(argv[1], &srv_addr.sin_addr) == 0)

    sendto(conn_sock, line, strlen(line), 0, (sockaddr *)&srv_addr, sizeof(srv_addr));

и у меня на сервере вызывается 
Код

        recvfrom(work_sock,buffer,BUF1, 0, (sockaddr *)&cl_addr, &sz)

какой порт занесется в cl_addr? или там будет пусто?

Цитата

нет, т. к в рамках хоста все клиенты будут "сидеть" на разных портах

насколько я понимаю лупбэк интерфейс какбы создает новый сетевой интерфейс, а как его создать?

Это сообщение отредактировал(а) 4eJIoBekMoJIekyJIa - 27.5.2008, 18:52
--------------------
PM MAIL   Вверх
MAKCim
Дата 27.5.2008, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(4eJIoBekMoJIekyJIa @  27.5.2008,  14:51 Найти цитируемый пост)
какой порт занесется в cl_addr? или там будет пусто?

порт клиента (назначается динамически в момент отправки пакета клиентом)
Цитата(4eJIoBekMoJIekyJIa @  27.5.2008,  14:51 Найти цитируемый пост)
насколько я понимаю лупбэк интерфейс какбы создает новый сетевой интерфейс, а как его создать?

не понял вопроса
loopback - виртуальный сетевой интнрфейс (не соответствет никакому NIC)
создавать ничего не надо, он является частью сетевой подсистемы ядра
доступен через символьный идентификатор lo


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
4eJIoBekMoJIekyJIa
Дата 27.5.2008, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(MAKCim @  27.5.2008,  09:17 Найти цитируемый пост)
раскидать клиентов по разным портам и работать через loopback-интерфейс

не понял как это...объясни пожалуйста



Это сообщение отредактировал(а) 4eJIoBekMoJIekyJIa - 27.5.2008, 21:25
--------------------
PM MAIL   Вверх
MAKCim
Дата 27.5.2008, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(4eJIoBekMoJIekyJIa @  27.5.2008,  21:14 Найти цитируемый пост)
не понял как это...объясни пожалуйста

делать bind() на сокетах клиентов
(или ничего не делать: порт назначит ядро)
все пакеты отсылать на 127.0.0.1


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
4eJIoBekMoJIekyJIa
Дата 28.5.2008, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(MAKCim @  27.5.2008,  23:19 Найти цитируемый пост)
все пакеты отсылать на 127.0.0.1 

Если просто выслать на 127.0.0.1 онж не перешлется всем сокетам клиентам.
--------------------
PM MAIL   Вверх
MAKCim
Дата 28.5.2008, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(4eJIoBekMoJIekyJIa @  28.5.2008,  09:45 Найти цитируемый пост)
Если просто выслать на 127.0.0.1 онж не перешлется всем сокетам клиентам. 

клиенты отсылают пакеты серверу на 127.0.0.1
сервер отсылает пакеты клиентам на 127.0.0.1 с указанием портов клиентов (из cl_addr)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
4eJIoBekMoJIekyJIa
Дата 31.5.2008, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(MAKCim @  28.5.2008,  10:07 Найти цитируемый пост)
сервер отсылает пакеты клиентам на 127.0.0.1

ну в моей задаче такое не катит(сервер ведь будет поочереди отсылать на каждый порт),а мне  нужно чтобы всем клиентам приходило одновременно...
смотри а если я буду биндить клиенты на 127.0.0.2 127.0.0.3 итд и отправлять бродкаст на 127.0.0.255 они его получат?
--------------------
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




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


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

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