Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/27: Рейтинг темы: голосов - 27, средняя оценка - 4.89
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235

Нужно написать клиент используя epoll

25.01.2011, 19:44. Показов 5051. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать простой клиент на epoll, который присоединится к двум серверам (например 2 разных сайта) и выводит в консоль все получаемые от них данные, до тех пор, пока эти серверы не разорвут соединение.
Не удалось найти простые примеры в инете... помогите
Спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.01.2011, 19:44
Ответы с готовыми решениями:

Нужно написать программу с++ используя функции
В той из них где главная диагональ содержит больше положительных элементов найти количество элементов, расположенных выше главной диагонали...

Передача файлов клиент-сервер-клиент используя Socket
Добрый день! Срочно нужна помощь. Мне нужно передать файлы с клиента на сервер и обратно, используя TServerSocket и TClientSocket. ...

Нужно написать программу SMPP-клиент, который будет слать смс, проверять их доставку, выводить статистику в файл и т.д.
Всем привет! Есть здесь люди, которые знакомы с модулем Net::SMPP для Perl? Есть пара вопросов по этому модулю... Вообщем нужно написать...

13
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.01.2011, 23:49
Цитата Сообщение от Damaks Посмотреть сообщение
Не удалось найти простые примеры в инете
в инете полно примеров. с чем именно у вас сложность?
0
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
26.01.2011, 01:15  [ТС]
В инете не так много примеров, сколько хотелось бы. Всё, что есть, я изучил, не понял только про добавление дескрипторов и установку соединений... этот момент везде либо плохо описан, либо вообще пропущен. И в основном везде описаны серверы, меня это немного путает.

Добавлено через 13 минут
Вот как-то так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  
epfd = epoll_create(2);  // максимальное ожидаемое количество соединений
 
// добавление дескрипторов
 
// установка соединений, например с сайтами ya.ru:80 и mail.ru:80 правильно?
 
  while (1) {
    // ожидаем момента, когда надо будет работать...
    int nfds = epoll_wait(epfd, events, MAX_EPOLL_EVENTS_PER_RUN, EPOLL_RUN_TIMEOUT);
    if (nfds < 0) die("Ошибка в epoll_wait!");
 
    // для каждого готового сокета
    for(int i = 0; i < nfds; i++) {
 
     // В этом месте через recv как-то считываем данные из сокета
     // Непонятно как определить что за сокет здесь?
 
      int fd = events[i].data.fd;
      handle_io_on_socket(fd);  // Не совсем понятно, потом разберусь что тут происходит
     }
  }
помогите дописать
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
26.01.2011, 04:24
Цитата Сообщение от Damaks Посмотреть сообщение
не понял только про добавление дескрипторов
смотрите пример: http://www.kernel.org/doc/man-... oll.4.html

Цитата Сообщение от Damaks Посмотреть сообщение
и установку соединений..
это к epoll не относится.

Цитата Сообщение от Damaks Посмотреть сообщение
Непонятно как определить что за сокет здесь?
строкой ниже, показано как получить сокет на котором произошло событие.
0
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
11.02.2011, 22:26  [ТС]
Ещё такой вопрос, не по epoll
Вот я создаю сокет:

int ssock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

ssock - это его дескриптор, который увеличивается с каждым новым сокетом на 1. Так получается что 0,1,2,..4 заняты и вероятно будут заняты ещё и другие. Т.е. у меня сейчас начинается с 5.
Это неочень удобно, т.к. мне выдана таблица, в которой прописано четкое соответствие id=адрес. Начинается от 0.
Если к примеру у меня уже 10 сокетов и я разорву соединение с сокетом с дескриптором 5 и потом создам снова, то будет уже соединение с данным севером с дескриптором 15. Получается в процессе работы они вообще будут меняться местами.
Мне нужна жесткая привязка. Былобы удобнее указывать "какому числу какой сокет соответствует"...
Сейчас вижу только один выход - создать таблицу соответствий (id <=> дескриптор) и каждый раз обращаться к ней, но согласитесь, это как-то неправильно... ненужное усложение кода

Может я что-то не знаю или не понимаю?

Добавлено через 53 минуты
Подскажите как лучше реализовать? У меня зараннее не известно количество дескрипторов, нужно использовать stl?
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.02.2011, 22:28
http://cplusplus.com/reference/stl/map/
0
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
11.02.2011, 22:34  [ТС]
Вот так просто? И никаких других способов нет? Этож вроде совершенно нелогично такое усложнение. Вроде как лишняя операция...
у меня даже такие ощущение что map будет грузить гораздо больше, чем сам epoll
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.02.2011, 22:41
Цитата Сообщение от Damaks Посмотреть сообщение
мне выдана таблица, в которой прописано четкое соответствие id=адрес.
что за таблица? откуда взялась? бред сивой кобылы!
дескрипторы выделяет ОС, и повлиять на это никак нельзя. очевидно.
0
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
11.02.2011, 22:48  [ТС]
Цитата Сообщение от niXman Посмотреть сообщение
что за таблица? откуда взялась? бред сивой кобылы!
Ну как бред, у меня есть таблица из 10, а потом и более, серверов. Она содержит id, адрес и порт каждого.
Я соединяюсь с каждым, и мне нужно втечение определенного времени логировать всё, что они отправляют. Команд они отсылают очень много.
Приходит строка с какого-то, мне получается ещё по дескриптору нужно найти id в map контейнере и потом только записать в соответствующий файл... или в базу. И так на каждую команду перебирать контейнер - накладно выходит.
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.02.2011, 22:55
Цитата Сообщение от Damaks Посмотреть сообщение
у меня есть таблица
что из себя представляет таблица?

Добавлено через 1 минуту
Цитата Сообщение от Damaks Посмотреть сообщение
мне получается ещё по дескриптору нужно найти id в map контейнере и потом только записать в соответствующий файл... или в базу. И так на каждую команду перебирать контейнер - накладно выходит.
для этого ассоциативные контейнеры и придуманы
0
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
11.02.2011, 23:23  [ТС]
Цитата Сообщение от niXman Посмотреть сообщение
что из себя представляет таблица?
MySQL, 3 столбца - id, адрес и порт каждого сервера. Файлы логов должны иметь названия id серверов.
Цитата Сообщение от niXman Посмотреть сообщение
для этого ассоциативные контейнеры и придуманы
Не знаю, не думаю что они придуманы именно для таких случаев. Я всегда думал что контейнеры для хранения каких-то серьезных списков, а не для такой глупости.
Меня это очень смущает, хочу без лишних операций сделать.
Ну наверняка есть, может и извращенный, способ сделать напрямую, попробую поискать в инете как народ в такой ситуации выкручивается
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
11.02.2011, 23:37
Цитата Сообщение от Damaks Посмотреть сообщение
MySQL, 3 столбца - id, адрес и порт каждого сервера. Файлы логов должны иметь названия id серверов.
так я зачем ты себя привязываешь к дескрипторам?! это не программиста юрисдикция. ОС это делает никого об этом не спрашивая.

Цитата Сообщение от Damaks Посмотреть сообщение
Ну наверняка есть, может и извращенный, способ сделать напрямую, попробую поискать в инете как народ в такой ситуации выкручивается
отпишись если что-то нароешь. очень любопытно.
0
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
12.02.2011, 00:09  [ТС]
Вроде получилось, буду рыть дальше

Добавлено через 16 минут
Ещё такой вопрос, я могу получить по дескриптору адрес и порт сервера с которым соединен?
Нашел getpeername, но она вроде как выполняет обратную функцию
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.02.2011, 00:54
Цитата Сообщение от Damaks Посмотреть сообщение
Нашел getpeername, но она вроде как выполняет обратную функцию
вроде бы она.
гляньте еше getsockname
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.02.2011, 00:54
Помогаю со студенческими работами здесь

Нужно написать алгоритмы действий решения задач , используя язык программирования
Часть 2: 19,2 Часть 3: 19,2,27,32,39,49

Нужно написать программку по заданию, используя функции, как можно проще
Дан интервал натуральных чисел . Напечатать на экране все те числа, которые принадлежат этому интервалу и которые можно выразить как сумму...

Нужно написать python функцию, которая возвращает кол-во уникальных целочисленных решений используя Хеш-таблицу
Нужно написать python функцию, которая возвращает кол-во уникальных целочисленных решений используя Хеш-таблицу Пример: ...

Мне нужно было написать модуль вычисляющий выражение. С используя этого модуля сделать уже программу
Есть одна проблема в коде, что делать? В ответе все время выдает 0.0. Посмотрите пожалуйста. Модуль: unit modul2; interface ...

Написать клиент-серверное приложение, где клиент должен отсылать запрос на сервер, а тот должен опрашивать БД
Здравствуйте, имею задачу, но не знаю как реализовать. Задача состоит в том чтобы написать клиент серверное приложение, клиент должен...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru