powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Программирование работы сервера с множеством клиентов
25 сообщений из 123, страница 3 из 5
Программирование работы сервера с множеством клиентов
    #33109667
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNzИнтегратор,

А Вам не приходило в голову, что ваш вариант 2 как раз является попыткой воплотить в С то, что я предложил в самом начале.


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


А макросы ужасно неприятны в отладке и к тому же они очень толерантны к глупым ошибкам. Как только Ваши макросы станут посложнее, вы почувствуете эту проблему.


Если вы обратили внимаение то так реализована компиляция в уникоде/без уникода в Сях например - и ничего - проблем пока не встречал. Такое использование макросов вполне нормально.


Кроме этого макросы не решат проблемы с ассоциированными данными.


HANDLE - то же запрятанное что-то что кстати тоже разное в зависимоти от версии винды :). К чему я это - ук тому что передавайте void* как внутреннее состояние в функции.

Короче поставленную автором топика задачу можно и нужно решить хоть на голом С и ООП здесь совершенно не причём - нарвится пользуйся - не нравится - не пользуйся. Проблемы буду в любом случае и где их будет больше - вопрос совершенно не однозначный.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33109693
Кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreiNz,
Если вас макросы смущают, то темплейты должны быть вообще смертельны
Кстати, что там у нас с уровнем абстракции при инкапсуляции? Я жду, где про это дело можно почитать в интернете и книжках.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33109799
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КодерAndreiNz,
Если вас макросы смущают, то темплейты должны быть вообще смертельны
Кстати, что там у нас с уровнем абстракции при инкапсуляции? Я жду, где про это дело можно почитать в интернете и книжках.

Если AndreiNz хочет пытаться быть последовательным, (хотя после заявлений о паттернах, на вопросы о которых он кстати отказался отвечать, всё может быть :) ) он должен тащится от шаблонов в реализации С# - компилируемые, типобезопасные... и поэтому совершенно убогие и непригодные для метапрограммирования :)
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33110492
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗемлекопMasterZiv,
вы просто либо не все прочитали, либо не понимаете суть проблемы. Если есть умные мысли, то примеры кода в студию.

У меня мысли есть, и причем, прошу заметить, все мысли гениальные и божественные.

Я прочитал следующее :
автор
Во всем мире получается без всяких интерфейсов и абстрактных классов на обычном С

, более мне читать не нужно - я и так понял суть проблемы.

Так вот, по этому поводу есть две мысли :
0) С++ рулез, С - отстой.
1) В нашем 21 веке, когда есть возможность писать на С++, писать на С просто нелепо и смешно.

Именно поэтому я и поддержал AndreiNz, потому что он прав.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33110510
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
У меня мысли есть, и причем, прошу заметить, все мысли гениальные и божественные.


Не думаю, что под влиянием алкоголя или травки у вас могут быть такие мысли.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33111139
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot MasterZiv
0) С++ рулез, С - отстой.
Именно поэтому я и поддержал AndreiNz, потому что он прав.[/quot]

Во первых я не вижу аргументации, а во вторых переносимы на программы на С++ надругие компиляторы ? Не хотелось бы вас расстраивать - но переносимы с большой натяжкой. Я уж молчу о проблемах с бинарниками на С++ - например при желании поместить объект в dll ... И не приводите в качестве примера COM - полноценных бинарных компонент, реализующий возможности С++ вы не сделаете.


1) В нашем 21 веке, когда есть возможность писать на С++, писать на С просто нелепо и смешно.


В нашем 21 веке когда есть managed код писать на unmanaged C++ просто нелепо и смешно .
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33112997
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала отвечу Крдеру.

Проблемы с макросами обусловленны прежде всего тем, что макросы обрабатывает препроцессор. А темплэйты обрабатываются компилятором. Их иногда еще называют макросами, одобренными компилятором. В связи с этим отладка темплейтов удобнее отладки макросов.

Да, спасибо, что напомнили. Исправляю ошибку.

Полиморфизм обеспечивает более высокий уровень абстракции нежели инкапсуляция. Copyright (c) AndreiNz 2005. All rights reserved. При перепечатке ссылка на данный пост обязательна.

Теперь Интегратору. Вроде бы я пытался отвечать на все ваши вопросы, даже не самые скромные. Видиимо где-то упустил. Не сочтите за труд, повторите, что вы спрашивали у меня про Design patterns а я такой - сякой не ответил. Просто лень перелопачивать весь топик.

Теперь про HANDLE, по вашему посту видно, что вы не совсем понимаете, что это такое. Так вот, когда вы просите Windows создать какой-либо объект (не путать с ООП). Он, если может, делает это и возвращает вам уникальный идентификатор, который вы можете использовать для дальнейших операций с этим объектом. В Win32 это всегда будет 32 константа, а в Win16 (Windows 3.1, WFWG и тд), возможно и 16-ти, но этим я не занимался. Так, если вам, что-либо интересно, вы спрашивайте, я вам многое могу рассказать. Ну например что такое ISR и DPC и зачем они нужны. Или для чего в COM создаются proxy и stab-ы.

Кстати, я тоже хотел бы узнать, чем занимается ваша фирма, только я не буду утверждать, что у нее негодная продукция. Мне воспитание не позволят делать подобные заявленя, без 100% уверенности в правоте подобного заявления. Кстати, сколько вы сами разработали подобных серверов, может у вас есть огромный опыт, а я всего лишь любитель (на фоне вас), который сделал всего два и третий серьезно переделал. Работают ли ваши сервера, где-либо? Спасибо за ответ.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33113018
Кодер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreiNzСначала отвечу Крдеру.

Проблемы с макросами обусловленны прежде всего тем, что макросы обрабатывает препроцессор. А темплэйты обрабатываются компилятором. Их иногда еще называют макросами, одобренными компилятором. В связи с этим отладка темплейтов удобнее отладки макросов.

Да, спасибо, что напомнили. Исправляю ошибку.

Полиморфизм обеспечивает более высокий уровень абстракции нежели инкапсуляция. Copyright (c) AndreiNz 2005. All rights reserved. При перепечатке ссылка на данный пост обязательна.


Оба объяснения похожи на старый анекдот:
- В Петербурге жить лучше, чем в Москве.
- Чем лучше то?
- Чем в Москве.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33113041
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNz

Теперь Интегратору. Вроде бы я пытался отвечать на все ваши вопросы, даже не самые скромные. Видиимо где-то упустил. Не сочтите за труд, повторите, что вы спрашивали у меня про Design patterns а я такой - сякой не ответил. Просто лень перелопачивать весь топик.


Вы утверждали о каких-то накладных расходах, связанных с DP. Для меня это равносильно утверждению что ООП приводит к накладным расходам. С со вторым вы миритесь, а с первым - нет :) Как это понимать ?


Теперь про HANDLE, по вашему посту видно, что вы не совсем понимаете, что это такое.


HANDLE может быть что угодно - это концепция не Windows, а общий подход инкапсуляции внетренний структуры объекта. Это может быть как просто целое число, являющееся например индексом в некотором массиве указатель на объекты, как и например непосредственно адресом, по которому расположен объект. Соответсвенно handle позволяет программировать на процедурных языках в ООП стиле - вот и всё.


Так вот, когда вы просите Windows создать какой-либо объект (не путать с ООП). Он, если может, делает это и возвращает вам уникальный идентификатор, который вы можете использовать для дальнейших операций с этим объектом.


А вот тут кстати с удовольствие попутаю с ООП . Виндоус - объектно0ориентированная система и объекты виндоус вполне можно рассматривать как объекты.

Для меня эти два примера кода являются равноценными - да и компилятор сгенерит похожий код - в первом случае он сам передаст состояние объекта, а во вторым - это делаете вы сами
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
class MyObject {
   void run(int n);
};

MyObject obj;

obj.run( 123 );

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
void* alloc();
void dealloc(void*);
run(void* obj, int n);

void* obj = alloc();
run(obj,  123 );
dealloc(obj);

В Win32 это всегда будет 32 константа, а в Win16 (Windows 3.1, WFWG и тд), возможно и 16-ти, но этим я не занимался. Так, если вам, что-либо интересно, вы спрашивайте, я вам многое могу рассказать. Ну например что такое ISR и DPC и зачем они нужны. Или для чего в COM создаются proxy и stab-ы.


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


Системы автоматизации финансовых расчётов.


Кстати, сколько вы сами разработали подобных серверов, может у вас есть огромный опыт, а я всего лишь любитель (на фоне вас), который сделал всего два и третий серьезно переделал.
Работают ли ваши сервера, где-либо? Спасибо за ответ.


Я не считаю их по количеству - надо смотреть что имеено и как вы сделали, можно и 100 сделать. Я сделал 3. Два на скорую руку, второй уже кстати 1.5 лет работает, перезагружался два раза при профилактических работах на сервере. Третий серьёзно переработал и продолжаю перерабатывать. Думаю работы на нём ещё на полгода как минимум хватит.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33113065
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNzТеперь про HANDLE, по вашему посту видно, что вы не совсем понимаете, что это такое. Так вот, когда вы просите Windows создать какой-либо объект (не путать с ООП). Он, если может, делает это и возвращает вам уникальный идентификатор, который вы можете использовать для дальнейших операций с этим объектом. В Win32 это всегда будет 32 константа, а в Win16 (Windows 3.1, WFWG и тд), возможно и 16-ти, но этим я не занимался.


HANDLE - это void * . См. winnt.h.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33113233
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Землекоп
HANDLE - это void * . См. winnt.h.

Ещё более интересные вещи можно нарыть если покопаться в исходниках например той же 2000-ной винды :) Но на самом деле это не принципиально, главное что handle - это что-то что ассоциируется с некоторой структурой данных о которыой вы ничего не знаете. Ну скажем так: НЕ ДОЛЖНЫ ничего знать ;). Так как если эту структуру передавать не как void* то вы легально сможете менять её как угодно не следуя рекомендациям. Например см. CRITICAL_SECTION ... А вообще это уже оффтоп и я вообще имел в виду не реализацию в винде а пытался донести до AndreiNz что Сишные методики, о которых шла речь прекрасно работают и активно используются во множестве рабочих комерческих проектов.....
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33122775
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интегратор prof79А библиотекам как разруливать внутри себя?

Вариант номер 1

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#ifdef _UNIX
   #define beginThread befinUnixThread
   #define acquireLock acquireLockUnix
...
#ifdef _WIN32
   #define beginThread begnWinThread
   #define acquireLock acquireLockWin
...
#endif

Вариант 2
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
typedef struct tagGenericApi {
   PFN1 beginThread; 
   PFN2 acquireLock; 
...
} GenericApi;

void loadWinApi(GenericApi* api) {
  api->beginThread = &BeginWinThread;
  api->acquireLock = &acquireLockWin;
}

void loadUnixApi(GenericApi* api) {
  api->beginThread = &BeginUnixThread;
  api->acquireLock =  &acquireLockUnix;
}
void loadApi(GenericApi* api) {
#ifdef _UNIX
   loadUnixApi(api);
#ifdef _WIN32
   loadWinApi(api);
#endif
}
ну вот хотя бы так....


Смеялся,
Создаем себе проблемы и героически их преодалеваем


Интегратор
Для меня эти два примера кода являются равноценными - да и компилятор сгенерит похожий код - в первом случае он сам передаст состояние объекта, а во вторым - это делаете вы сами

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
class MyObject {
   void run(int n);
};

MyObject obj;

obj.run( 123 );

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
void* alloc();
void dealloc(void*);
run(void* obj, int n);

void* obj = alloc();
run(obj,  123 );
dealloc(obj);


В Win32 это всегда будет 32 константа, а в Win16 (Windows 3.1, WFWG и тд), возможно и 16-ти, но этим я не занимался. Так, если вам, что-либо интересно, вы спрашивайте, я вам многое могу рассказать. Ну например что такое ISR и DPC и зачем они нужны. Или для чего в COM создаются proxy и stab-ы.


Смеялся еще сильнене,

вставьте между

run(obj, 123);
и
dealloc(obj);

пару сотен строк кода, и пока я буду смеяться дальше,
а вы будете заниматься отладкой(поиском утечки памяти и т.д. и т.п.)

А как насчет глупых ошибок, типа обращения по неверному типу указателя.
Согласитесь человеческий фактор существует всегда.

Я еще смеюсь , а вы продолжайте заниматься отладкой.

Ну насмешили.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33122778
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТО Интегратор

Ваш стиль ведения проекта напоминает старую поговорку


Два солдата из стройбата заменяют экскаватор.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33122810
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat,

умников тут и без вас хватает. Ваш код в студию, если хотите, что-либо обсуждать.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33122917
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNz1 Разберитесь с socket API socket(), listen(), accept(), connect() и тд.
2. Напишите два класса ListeningSocket & ConnectedSocket, можно унаследывать их от одного базового MySocket. Или ищите все это на Интернете. Если не хотите зависимосто ит платформы, то Вам нельзя пользоваться всякими WSSoket-ами. Но полная независимость у Вас врядли получится. Поэтому можете использовать интерфейсы interface или абстрактные классы, что в прицыте почти одно и тоже.
3. Создавть отдельный процесс на каждое соединение довольно накладно. Стандартное решение - использовать Thread или как их еще называит потоки. Разберитесь с этим вопросом очень хорошо.
4. Не помешает хорошое знание объектно-ориентированного программирования в C++.
Мое изначальное намерине отнюдь не было - ввяызываться в спор о ООП. Однако, из собственного опыта я знаю, что ООП существенно упрощает разработку любых приложений. Прежде всего за счет того, что вы создаете собственные абстракции, с которыми вы сами потом и работаете. Да, нужно владеть этим предметом на достаточно высоком уровне, но это справедливо для любой технологии и любого языка.

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

Само использование этого подхода позволяет вам получить достаточно независимые слои, которые относительно просто соединять как друг с другом так и с новыми элементами.

Я тоже когда-то прошел через отрицание ООП, пока сам не попыталя его мспользовать. Что-то получилось, но полную силу ООП можно почувствовать, когда используешь все возможности данного подхода. А разве это не справедливо для любой технологии?

Да я погорячился, когда сказал, сто Design patterns могут завести куда угодно. Признаю, правильнее было бы сказать, что сдуру можно и шею сломать. Что уже было сказанно мной.

Землекоп,

Попробуйте поиграть с ООП. Начните не с сокетов и Thread-ов, а с бизнес логики. Когда почувствуете вкус и саму идею, тогда можете переходить к сокетам и тд.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33122945
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNzПопробуйте поиграть с ООП. Начните не с сокетов и Thread-ов, а с бизнес логики. Когда почувствуете вкус и саму идею, тогда можете переходить к сокетам и тд.

Яйца курицу учат
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33122962
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поскипано..
AndreiNz
Я тоже когда-то прошел через отрицание ООП, пока сам не попыталя его мспользовать.


Так кто же отрицал ООП ??!! Мне кажется что концепции ООП никто в этой ветке особо не оспаривал, спорили с Вашими утверждениями и некорректными и высказываниями... Автор спросил как решить поставленную задачу - ему сказали как, а Вы в ответ на это стали утверждать что тут без ООП никуда... Вот Крамер великолепно обходиться умудрялся (до сих пор его книгу полистываю ;) ). Более современные авторы с ООП пишут совершенно непотребную литературу, а Вы говорите ООП изучайте... Надо концепции общие изучать и подходы, а не зацикливаться на конкретной технологии. Средство не должно быть замоцелью.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33123399
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Землекоп,

Так для справки, я профессионально, те за деньги разрабатываю парограммы так, чтобы не соврать 22-23 годика как. Так, что кто яйца, а кто курица, это еще надо посмотреть.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33123400
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интеграторпоскипано..
Автор спросил как решить поставленную задачу - ему сказали как, а Вы в ответ на это стали утверждать что тут без ООП никуда ...

Тоесть по вашему фраза AndreiNz. Не помешает хорошое знание объектно-ориентированного программирования в C++.
означает, что без ООП никуда.

Знаете, мне простительно недопонимание русского языка, так как я на живу в России уже около 9 лет, но вам, вы уж извините...
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33123436
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNzЗемлекоп,

Так для справки, я профессионально, те за деньги разрабатываю парограммы так, чтобы не соврать 22-23 годика как. Так, что кто яйца, а кто курица, это еще надо посмотреть.

Сколько же вам лет, дедушка? При таком аттитьюде, я бы больше 23 и не дал бы.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33123502
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNz
Тоесть по вашему фраза AndreiNz. Не помешает хорошое знание объектно-ориентированного программирования в C++.
означает, что без ООП никуда.

Знаете, мне простительно недопонимание русского языка, так как я на живу в России уже около 9 лет, но вам, вы уж извините...

Вы очень серьёзно преувеличили важность ООП для поставленно автором топика задачи. ООП к этой задаче вообще не имеет никакого отношения. Это равносильно утверждению - для этой задачи желательно ещё знание С# ... и т.п. :)
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33123525
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИнтеграторВы очень серьёзно преувеличили важность ООП для поставленно автором топика задачи. ООП к этой задаче вообще не имеет никакого отношения. Это равносильно утверждению - для этой задачи желательно ещё знание С# ... и т.п. :)

Открою военную тайну. Самое смешное, что такие задачи чаще всего решают люди, которые не особенно вникают в сокеты, ОПП и тд и тп. Им хватает php, perl и тд и тп. Совсем отсталые довольствуются просто html-файлами. WWW - сервер разбирается сам с этими проблемами. Он для этого и был придуман.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33124809
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Землекопonstat,

умников тут и без вас хватает. Ваш код в студию, если хотите, что-либо обсуждать.


Ну коль вы так хотите пожалуйста, пример API сетевого мультиплексора
(часть моего уже готового проекта).
С удовольствием выслушаю конструктивную критику.

Код: plaintext
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.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
..................

#define O_SERV  0x01   // server   
#define O_HOST  0x02   // host are resolved 
#define O_PORT  0x04   // port are resolved
#define O_CONN  0x08   // connection established
#define O_OK	0x06   // host and port  parameters are  set
#define O_POOL  0x10   // pool is  master
#define O_RR      0x20   // ready for read
#define O_RW     0x40   // ready for write
#define O_ERR   0X80   //  socket failed

class c_netconn: public c_nettimer   // network  connection
{
int s ; //  socket descriptor
int s_idx;  // pool index
int p_port; // connections port
struct sockaddr_in  s_addr; 
struct hostent  * shost;
char s_status;  // object status    
/*********connections satus description ***************************
                      sets
8765 - in the pool    4321 - server/client  O_SERV
||+-ready for read    ||+---  host          O_HOST
|+--ready for write    |+----  port	    O_PERT
+---                  +-----  connected	   
error flag apears when  operation is attempted and failed.

*******************************************************************/
int max_atempts;  // max attempts( intit by default by  MAXATTEMPT)
int  s_queue;        // 
sbuffs s_rdbuff;     // buffer for read  message
sbuffs s_wrbuff;    // buffer for write message
sbuffs s_statstr;    // string of connection status  |host:port|status|
public:
c_netconn();    //  default cork 
c_netconn(char* f_host, int f_port);
c_netconn(int f_ds);   // servers socket constructor 
virtual ~c_netconn();

bool  pool(int f_num );             // pool is master of this object and destroy it  
	  	    		    // espesially for call by  c_netpool.add(.....)  f_num is index in the pool.

hostent* host(char* f_host=NULL); // set and return host
int   port(char* f_port=NULL);        // set and return port
void  port(int f_port);                   // set port from integer
virtual int   connect();		         // attempt to connect
int   operator()();                       // return  socket descriptor( try to connect when have not done)    
int   fds();                    // the  same  as operator()(); 
virtual int   writemsg(char * f_msg, int f_size); // write message to the socket
virtual int   readmsg( char* f_msg=NULL,  int f_size= 1024  ); // read message from socket  
                                                  //to the internal buffer f_size is an buffer size
                                                   
int   queued();                 // how many  massages have sent but responce did not received
inline char status(){return s_status;};
inline const  int number() const
	{
	    return s_idx;
	};	    
virtual char* stat(); // return statistics string
};

//============================================================================
//
// 	class netconnpool retreive  sockets(descriptors) pool
//	with multiplexing message traffic and provide  async I/O  operations
//
//===========================================================================
class c_netconnpool:public c_nettimer
{
c_netconn* s_conn[MAXCONN]; 
fd_set s_set;                     // mask of descriptors
int s_socs;			//how many live  sockets  is	 there	
int s_current;			// current socket
int s_readyr;                                  // how many sockets is ready to read;
int s_readyw;
int s_sec;			// default sleep in second(select syscall)
int s_usec;			// default sleep in milisecond(select syscall)

public:
         c_netconnpool();
virtual        ~c_netconnpool();

int add(char* f_host, int f_port);    // add connection to the pool
int add(c_netconn* f_conn);           // 
virtual int netconn();			      // make and/or accept connections 
                                                        //create new c_netconn object when 
                                                        //new connection is accepted 
virtual int socket();                               // retrun free socket

int readyr();			      // number  socket is ready for read
//char* stat();                         // gathering statistics for all sockets
virtual  c_netconn*  nextw(int f_idxset= 0 );    // return next socket  from idxset  which is ready to write
virtual  c_netconn*  nextr(int f_idxset= 0 );    // return next socket from  idx_set which is ready  to read;
c_netconn*  first(int f_idxset= 0 );    // first  live socket
};

#endif
(C) onstat- 

Любое копирование и использованине только с согласия автора(onstat-)


Теперь ваша очередь.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33124835
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Землекоп
Открою военную тайну. Самое смешное, что такие задачи чаще всего решают люди, которые не особенно вникают в сокеты, ОПП и тд и тп. Им хватает php, perl и тд и тп. Совсем отсталые довольствуются просто html-файлами. WWW - сервер разбирается сам с этими проблемами. Он для этого и был придуман.

Посмотрите на название раздела, он называется C++,
значит подразумемает обсуждение ООП проекта.

Вобщем не нужно съезжать с темы.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33124840
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-С удовольствием выслушаю конструктивную критику.
Теперь ваша очередь.

Для конструктивной критику нужно в вашу проблематику вникуть. А так на первый взягляд мне нотация используемая не очень нравится :) Я например привык к длинным названиям побробным с использованием прописных букв в начале каждлого слова. Но в принципе это дело вкуса ;)
...
Рейтинг: 0 / 0
25 сообщений из 123, страница 3 из 5
Форумы / C++ [игнор отключен] [закрыт для гостей] / Программирование работы сервера с множеством клиентов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]