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

Подскажите, пожалуйста, принцип решения следующей задачи,-

У меня есть сетевой TCP/IP сервер и куча TCP/IP клиентов. Мне нужно обеспечить перманентное взаимодействие между клиентами и сервером, при этом клиенты обращаются к серверу беспорядочно.

Я, допустим, могу решить это за счет либо выделения каждому соединению своего порта, либо за счет создания одного управляющего соединения, а другого общего (через какое идут данные с разных сокетов).

Не хочу ошибиться, и поэтому хотелось бы знать общепринятые способы решения аналогичных проблем (только для мультиплатформенного кода с BSDSockets/WinSocks, без компонентов и иже с ними).

PS: Также подскажите пожалуйста возможна ли мешанина байтов при одновременной посылке данных с разных клиентов на один и тот же сокет, или там действует система очереди.

Заранее спасибо за любой ответ.

С Уважением,
Иванов Артем,
www.cubereality.com
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33086118
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lexlutherЯ, допустим, могу решить это за счет либо выделения каждому соединению своего порта

Это делает сокетная библиотека автоматически. У сервера один порт, у каждого клиента свой. Порт клиента назначается автоматически из свободного пула портов, если его не задавать самому. Фактически каждый сокет содержит информацию о номере локального порта и удаленного с его ip-адресом. Идентификация однозначная.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33086183
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lexlutherЯ, допустим, могу решить это за счет либо выделения каждому соединению своего порта,
Ни в коем случае. Сервер слушает ОДИН порт - сколько бы клиентов одновременно не пришло к нему. На каждого клиента сам драйвер протокола TCP/IP будет создавать "соединение" и разбираться какой байт от какого клиента пришел, и кому что отправлять. Обычно, на стороне сервера для каждого клиента создается отдельный процесс который получает на вход уже созданое соединение с клиентом. И каждый процесс общается с клиентом как будто других клиентов несуществует.
Вот эти "соединения" и называются в TCP/IP сокетами.

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


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

AndreiNz
4. Не помешает хорошое знание объектно-ориентированного программирования в C++.

Не имеет отношения к сокетам совсем.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33096050
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, конечно и на обычном С написать, только стоит ли скатываться до технологий прошлого тысячелетия? ;) Ведь С++ был разработан как более хороший, читай лучший С. Да и форум этот посвящен С++ а не С.

На С сейчас, а не двадцать лет назад, пишут в основном только встроенные системы, ну там чайником управлять или пылесосом. Да еще индивидумы, которые не в состоянии осилить разницу между классом и объектом;)

А разница между С и С++ как раз в объектно ориентированном программировании. Это то, что делает С++ лучше, чем С. Поэтому, чем лучше владеешь этими свойсвами языка, тем более эффективные, гибкие и легко поддерживаемые системы создаешь.

Все что я написал, как раз основанно на моем собственном опыте разработки подобных серверов. И это не такая простая задача, которую можно решить простым наскоком. Объектно-ориентированное программирование может существенно упростить ее решение. А вопрос вообще-то был про сервера в целом, а не о сокетах...
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33096089
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNzМожно, конечно и на обычном С написать, только стоит ли скатываться до технологий прошлого тысячелетия? ;) Ведь С++ был разработан как более хороший, читай лучший С. Да и форум этот посвящен С++ а не С.


с++ с тем же успехом является технологией прошлого тысячелетия

AndreiNz
На С сейчас, а не двадцать лет назад, пишут в основном только встроенные системы, ну там чайником управлять или пылесосом.


Не всегда. Если нужно быстродействие, то используют чистый С. Часть сервера, которая отвечает за соединение - это самая критическая часть. Особенно, если количество клиентов, которые могут быть подключены, достаточно велико.

AndreiNz
А разница между С и С++ как раз в объектно ориентированном программировании. Это то, что делает С++ лучше, чем С. Поэтому, чем лучше владеешь этими свойсвами языка, тем более эффективные, гибкие и легко поддерживаемые системы создаешь.


Это верно для бизнес логики, но бессмысленно в данном случае. Тут будет один виток с accept, в котором при соединение будет создаваться новый виток для ослуживания это соединения. Я не вижу повода выпендриваться, что бы доказать свою приверженность ООП.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33096125
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNzМожно, конечно и на обычном С написать, только стоит ли скатываться до технологий прошлого тысячелетия? ;) Ведь С++ был разработан как более хороший, читай лучший С. Да и форум этот посвящен С++ а не С.
Ню-ню... Более хороший значит? Это с каких пор мешанина технологий стала более лучшей чем одна, стройная система?

AndreiNzВсе что я написал, как раз основанно на моем собственном опыте разработки подобных серверов. И это не такая простая задача, которую можно решить простым наскоком.
Да, для С++ это не такая простая задача. А для С - элементарная :)
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33096484
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервер слушает один порт - при подключении очередного клиента открывается клиентский сокет и для работы с клиентом создаётся новый серверный поток управления. По моему совершенно классическая задача, подробно расписанная в любой серьёзной книге по сетевому программированию. Есть хорошая книга "Программирование с сетях Windows 2000". Ещё есть замечательная книженция Программитрование TCP/IP в стандарте posix что ли называется - такая жёлтенькая - из трёхтомной серии ... Валяется где - то в бумажном, если надо могу точно прсмотреть название/авторов - книга крайне полезная для любого программиста, связанного с сокетами.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33096497
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNzМожно, конечно и на обычном С написать, только стоит ли скатываться до технологий прошлого тысячелетия? ;) Ведь С++ был разработан как более хороший, читай лучший С. Да и форум этот посвящен С++ а не С.


Приехали... На С тоже можно писать в ООП - стиле и причём тут технологии прошлых тысячилетий не понимаю...


На С сейчас, а не двадцать лет назад, пишут в основном только встроенные системы, ну там чайником управлять или пылесосом. Да еще индивидумы, которые не в состоянии осилить разницу между классом и объектом;)

Не надо строить из всех дураков - всех кого я знаю из программистов чистого С - прекрасные специалистами, чего я бы не сказал про множество разработчиков С# не понимающих толком даже что такое виртуальная таблица ;) Это не касается всех - просто в среднем так выходит...


А разница между С и С++ как раз в объектно ориентированном программировании. Это то, что делает С++ лучше, чем С. Поэтому, чем лучше владеешь этими свойсвами языка, тем более эффективные, гибкие и легко поддерживаемые системы создаешь.


При недостаточно глубоком знании ООП и тонкостей его реализации на текущей платформе ничего хорошего не сделаешь. На С что делаешь то и получаешь - всё предельно прозрачно.


И это не такая простая задача, которую можно решить простым наскоком.


Согласен, хотя не такая и уж сверхсложная


Объектно-ориентированное программирование может существенно упростить ее решение. А вопрос вообще-то был про сервера в целом, а не о сокетах...

Опять ООП приплёл - и опять не к месту:). Разработать граммотную структуру приложения в ООП стиле на порядок сложнее чем в смешанном - процедурный + элементы ООП.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33099672
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Да, для С++ это не такая простая задача. А для С - элементарная :)

Чушь абсолютная, вы бы хотябы подумали перед тем как писать. Я просто не допускаю, что вы настолько нероффесионал, что способны сделать подобное завление подумавшию Язык С являетсяся подмножеством языка С++. Практически все, что написанно на С может быть включено в текст программы написанной на С++. Ну а если уж сильно приспичет то есть синтакс extern C. Так что опустится до уровня С всегда можно. Только вот стоит ли?

White Owl
Ню-ню... Более хороший значит? Это с каких пор мешанина технологий стала более лучшей чем одна, стройная система?


У вас, возможно, это называется мешаниной технологий, а у других это называется прогрессом. И в том, что разработчики языка решили сохранить совместимость с базовым С нет ничего плохого. Как и нет ничего плохого в самом С. Только разработка на нем высоко трудоемка - и это его основной недостаток.

А то, что С++ это лучший С сказал не я. Bjarne Stroustrup: C++ is designed to be "a better C," to support data abctruction, and to support object-orientated programming. (The C++ programming language second edition). Так что книжки надо читать, тогда и в голове мешанины не будет.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33099727
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЭто с каких пор мешанина технологий стала более лучшей чем одна, стройная система?

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


Когда нужно быстродействие такие фирмы как Микрософт и Борланд используют ассемблер. Покопайтесь в исходниках и вы найдете немало ассемблерного кода там где должен быть только С. Правда в данном случае о переносимости не говорят. Как бы вам это не нравилось, но ассемблер всегда был, есть и будет эффективнее С в работе с процессором и с памятью. И хотя можно предсказать какой ассемблерный код сгенерирует компилятор, вы не сможете его оптимизировать оперируя командами языка С. Вы так же не сможете указать компилятору какю машинную инструкцию использовать в том или ином случае. Это все привилегия ассемблера.

Ну а теперь о том как мы будем делать сервер. Как вы правильно заметили надо создать виток, только я его буду называть Thread, как в первоисточнике. Здесь вас и поджидает первая проблемка. Чтобы создать Thread в Windows вам надо вызвать комманду API CreateThread(). В UNIXe эта команда работать явно не будет. Что делает в таком случае программист С? Правильно он начинает вставлять директивы препроцессора #ifdef, #ifndef и тд. Этими директивами будет утыкан весь ваш проэкт и часто будет сложно определить в какой части кода (UNIXовской или Windowsкой) вы находитесь, особенно, если вы будете вызывать подпрограммы. А вы неприменно будете это делать даже в не очень сложном проэкте.
Какие опции есть у С++ ника? Он тоже будет пользоваться директивами препроцессора, а как же без этого. Только у него есть возможность сушественно сократить их колличество. Как? Относительно просто. Создаем абстрактный класс CThreadInterface в котором определены функции которые должны воплощать наследники, а сам класс этого делать не должен. Делается это так:
class CThreadInterface
{
public:
virtual int Execute() = 0;
virtual void Suspend() = 0;
virtual void vResume() = 0;
.
.
CThreadInterface();
virtual ~CThreadInterface();
}
=0; здесь указывает, что функция не реализуется в данном классе и ее обязанны реализовать наследники.

От этого класса наследуете два других: CThreadWindows и CThreadUnix в которых вы создаете и манипулируете Thread так как это положенно делать в UNIX и Windows соответственно. Вся прелесть в том, что специфика теперь разделена в отдельные классы, которые могут и по хорошему должны находиться в разных файлах. У вас больше нет мешанины кода. Каждая функция ассоциированна с классом, имя которого говорит вам с каким вариантом вы работаете.

Теперь как использовать данные классы. 1. Создаете указатель (можно создать и ссылку) на базовый класс:

CTheadInterface *pThread;

затем создаете объект, но уже специфического типа. Абстрактные классы нельзя создавать. Здесь вам пригодятся директивы препроцессора:

#ifdef _UNUX

pThread = new CThreadUnix;

#endif

#ifdef _Windows

PThread = new CThreadWindows;

#endif

А манирулируете вы уже указателем

pThread->Resume();
pThread->Suspend();

И тд. И это называется полиморфизмом. Таким же образом можно и нужно решать несовместимость API синхронизации Thread-ов, да и сокеты, хотя там и есть общий API, на самом деле лучше реализовать с учетом особенностий реализаций как в UNIX так и в Windows
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33099874
redskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNz White Owl
Да, для С++ это не такая простая задача. А для С - элементарная :)

Чушь абсолютная, вы бы хотябы подумали перед тем как писать. Я просто не допускаю, что вы настолько нероффесионал, что способны сделать подобное завление подумавшию Язык С являетсяся подмножеством языка С++. Практически все, что написанно на С может быть включено в текст программы написанной на С++...

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


Очень хотелось бы посмотреть на примерчик. Ну как, например, в С вы реализуете полиморфизм. Или инкапсуляцию... Ну наследственность, наверно, можно сляпать используя табличные функции..


Не надо строить из всех дураков - всех кого я знаю из программистов чистого С - прекрасные специалистами, чего я бы не сказал про множество разработчиков С# не понимающих толком даже что такое виртуальная таблица ;) Это не касается всех - просто в среднем так выходит...


Не надо обобщать! По-вашему выходит, что С язык хороший, потому, что на нем пишут хорошие специалисты, а вот C# плохой, так как ихние программисты не знают что такое vTable. А как много ваших хороших специалистов знают что такое vTable? Да я понимаю, что оно им не нужно. На самом деле я сам считаю, что С++ лучше шарпа. Уж больно я не люблю, когда за меня кто-то решает, что мне можно делать а чего нельзя.


При недостаточно глубоком знании ООП и тонкостей его реализации на текущей платформе ничего хорошего не сделаешь. На С что делаешь то и получаешь - всё предельно прозрачно.

Опять ООП приплёл - и опять не к месту:). Разработать граммотную структуру приложения в ООП стиле на порядок сложнее чем в смешанном - процедурный + элементы ООП


Так с дуру можно и шею сломать. (Подставте нужное слово). А так в нашей проффессии приходится постоянно учиться новому. И отказ от этого ведет в никуда. Вы просто не сможете в очередной раз найти работу.


Согласен, хотя не такая и уж сверхсложная


А никто и не говорил, что она сверхсложная. Но синхронизацию Thred-ов знать нужно, я уже не говорю о том, что надо понимать, что такое Thread и чем она отличается от процесса.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33099963
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNz
Чтобы создать Thread в Windows вам надо вызвать комманду API CreateThread(). В UNIXe эта команда работать явно не будет. Что делает в таком случае программист С? Правильно он начинает вставлять директивы препроцессора #ifdef, #ifndef и тд. Этими директивами будет утыкан весь ваш проэкт и часто будет сложно определить в какой части кода (UNIXовской или Windowsкой) вы находитесь, особенно, если вы будете вызывать подпрограммы.


Не весь, а только один .h файл. Я как раз принимаю участие в разработке системы передачи данных, которая должна работать под Linux, Solaris и Win32 платформами. Вместо прямого вызова функции вызывается макрос, который определяется в .h файле в зависимости от платформы. В с-файлах ifdef, редкость, которую изводят при первой возможности. Можно просто прописать библиотеку-прослойку для каждой платформы. И главный модуль писать на API прослойки.


AndreiNz

#ifdef _UNUX

pThread = new CThreadUnix;

#endif

#ifdef _Windows

PThread = new CThreadWindows;

#endif


Меня бы за такое выпороли. Это сводит на нет все преимущества ООП. В программе должен быть один класс CThread c с методами типа.
Реализация уже может содержать ifdef для подключения соотвествующего платформе API и не должна волновать прикладного программиста.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33099989
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redskin
Речь не о том, что "круче" - С или С++. Просто данная задача легко решается на обычном чистом С, знаний принципов работы сокетов здесь вполне достаточно. Углубляться в детали ООП и городить огород в виде иерархии классов именно в данной задаче ... Зачем? Т.е. может оно кому будет и полезно, но прописывать это как рецепт... Хм...

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

Во-вторых в ООП гораздо лучше реализуется повторное использование кода (или как это сейчас называется по-русски?).

В-третьих, вы можете использовать библиотеки классов поставляемые с компилятором STL (стандартная библиотека шаблонов) является частью стандарта языка С++ и должна быть в составе любого компилятора претендующего на соответствие стандарту. Плюс MFC и ATL от Микрософта и OWL от Борланда.

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

Тот кто собирается вас пороть просто не понимает объектно-ориентированного программирования. Он наверное где-то его учил, но так и не понял до конца. Оно - это прежде всего абстрации и и строгая привязка поведения к состоянию state and behaviar. Каждый класс должен делать только свою работу и быть независим от других настолько насколько это возможно. В приведенном мною примере полиморфизм как раз и позволяет вам отделить разные классы ответственные за разную специфику работы. Еще более эффективным полиморфизм может быть с сочетании с использованием контейнеров list, vector, dequque, map и тд.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33100080
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNzЗемлекоп,

Тот кто собирается вас пороть просто не понимает объектно-ориентированного программирования. Он наверное где-то его учил, но так и не понял до конца. Оно - это прежде всего абстрации и и строгая привязка поведения к состоянию state and behaviar. Каждый класс должен делать только свою работу и быть независим от других настолько насколько это возможно. В приведенном мною примере полиморфизм как раз и позволяет вам отделить разные классы ответственные за разную специфику работы.


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

AndreiNz
Еще более эффективным полиморфизм может быть с сочетании с использованием контейнеров list, vector, dequque, map и тд.

Я оставлю для комментариев других людей эту умную фразу
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33100085
redskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreiNz redskin
Речь не о том, что "круче" - С или С++. Просто данная задача легко решается на обычном чистом С, знаний принципов работы сокетов здесь вполне достаточно. Углубляться в детали ООП и городить огород в виде иерархии классов именно в данной задаче ... Зачем? Т.е. может оно кому будет и полезно, но прописывать это как рецепт... Хм...

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


Мои программы и так ничего себе структурированы, спасибо


Во-вторых в ООП гораздо лучше реализуется повторное использование кода (или как это сейчас называется по-русски?).


Да, это то все понятно, но не думаю, что автор топика рассчитвал на лекцию о плюсах и минусах ООП. Был задан конкретный вопрос (я тоже ничего по теме не написал, так оффтопик и флуд, каюсь :)) и он к ООП имеет мало отношения, согласитесь. Похожие задачи разбираюся в любой серьезной книжке по программированию сетевых приложений, и авторы в них, что характерно, (тот же Стивенс, например) обходились чистым С.

Все остальное - stl, mfc, atl, owl (этот то динозавр каким образом тут всплыл?) к теме имеют весьма опосредованное отношение. Любая технология - это средство, инструмент, а не самоцель. Если разработчик владеет ООП, он сам накрутит классов вокруг сокетов (или использует готовые решения такого типа), если нет, реализует на чистом socket api и тоже будет счастлив...

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

Не надо обобщать! По-вашему выходит, что С язык хороший, потому, что на нем пишут хорошие специалисты, а вот C# плохой, так как ихние программисты не знают что такое vTable. А как много ваших хороших специалистов знают что такое vTable? Да я понимаю, что оно им не нужно. На самом деле я сам считаю, что С++ лучше шарпа. Уж больно я не люблю, когда за меня кто-то решает, что мне можно делать а чего нельзя.


Как раз cпецы по С которых я знаю прекрасно представляют как устроена VTable и почему она именно так устроена.


Многоуважаемый - то что вы пишете про ООП - десткий лепет человека недавно освоившего ООП, точнее начавшего осваивать. Думаю что большинство участников этой ветке не хуже вас как минимум знают ООП - просто они как люой разумный человек решают задачу адекватно требованием/объёму работ и времени на решение а не выпендриваются ;).

А тепепь поехали


#ifdef _UNUX

pThread = new CThreadUnix;

#endif

#ifdef _Windows

PThread = new CThreadWindows;

#endif


для меня это типичный пример программирования в стиле С

Если уж хочется показать знание ООП то хотя бы фабрику классов наваял что - ли...


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


Блин - да какое имеет отношение ООП к структурировани. проекта ??? ИМожно напартачить бред как с ООП так и без ООП - причём с ООП ошибится гораздо проще. Посмотрите исходники винды на С - прекрасно формленный и хорошо структурированный код в ООП-стиле на голом С :)



В-третьих, вы можете использовать библиотеки классов поставляемые с компилятором STL (стандартная библиотека шаблонов) является частью стандарта языка С++ и должна быть в составе любого компилятора претендующего на соответствие стандарту. Плюс MFC и ATL от Микрософта и OWL от Борланда.


Елки - палки - опять приехали ! А кто запрещает писать в процедурном стиле и ими пользоваться - не в мультипарадигмости разве сила и гибкость С++ ?!


В-четвертых в MSDNе есть пример чатовой программы, которая может быть примером для построения подбного сервер, только не переносимого так как они используют serialisation. Но сама идея может быть воплощена в любой системе.


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


Еще более эффективным полиморфизм может быть с сочетании с использованием контейнеров list, vector, dequque, map и тд.


После столь неграммотных заявлений с Вами сложно будет спорить :) Какой связь полиморфизма со стандартными контейнерами вы усмотрели ??? Объясните нам тёмным - будьте добры ...
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33100229
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot redskinГоворя проще, я услышав исходный вопрос, посоветую читать Стивенса.
Вы - Буча и Страуструпа....
Чья точка зрения правильней? Не знаю [/quot]

Поддерживаю ! ;)
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33100528
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабас White OwlЭто с каких пор мешанина технологий стала более лучшей чем одна, стройная система?
бысренько расшифруем что такое "мешанина понятий" и "стройная система"
Прошу прощения, но я сказал "мешанина технологий" а не "понятий". Читай внимательнее. С - процедурный язык с макроподстановками. Все.
А современный С++ это смесь процедурного, объектного и макроподстановочного подхода. Плюс возможность использования кусков на чистом С. Имено это я и называю мешаниной технологий.
...
Рейтинг: 0 / 0
Программирование работы сервера с множеством клиентов
    #33100796
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
А современный С++ это смесь процедурного, объектного и макроподстановочного подхода. Плюс возможность использования кусков на чистом С. Имено это я и называю мешаниной технологий.

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

Я, наверное, не совсем понятно объяснил. Вы декларируете абстрактный объект и манипулируете им. А создаете конкретный, зависящий от платфлормы.
Тоесть если вы хотите передать свой объект функции, то вы передаете указатель на CThreadInterface. Например:

void DoSomething( CThreadInterface *pThread){
pThread->Resume();
}

В таком случае потребители вашего объекта не знают как он реализован. Им достаточно знать что это реализованно и только. Единственное место где различие между Windows и Unix реализацией имеет значение - это когда вы создаете объект.

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


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