Сокеты...

Все вопросы, связанные с программированием

Модератор: Злобные админы

Аватара пользователя
Destion
Дипломник
Сообщения: 544
Зарегистрирован: Ср, 14.06.2006 17:47

Сообщение Destion » Вт, 17.10.2006 10:53

AL писал(а):Пасиба...
... однако лишние 50 кб после компиляции ставят под вопрос его использование. :wink:
Вот еще один вариант - покопайся в исходниках компонента, убери все ненужное, может в килобайт уложишься. ;)
1 Терапевт - это 1024 Гигапевта или 1048576 Мегапевтов.

Аватара пользователя
vag
из зажрамшихся
Сообщения: 577
Зарегистрирован: Пт, 13.02.2004 18:50
Откуда: физ.-мат. деревня Глазов

Сообщение vag » Вт, 17.10.2006 21:11

Не понятно что передавать функции WSAAsyncSelect в качестве второго параметра (хэндл окна).
Если бы я программил под форточками (правда, если б это случилось, то уж точно б не на "паласкале", а на "сях, и без плюс-плюсов"), то я бы попробовал указать (HWND*)NULL. А вообще и впрямь, посмотри-ка wsock2.hlp: снимется масса вопросов
Ну а для того чтобы управлять сервачком нужен интерфейс, и желательно - графический
Сколько не силился, так и не смог припомнить "боевых" сервисов с графическим интерфейсом. Да что там с графическим! И с текстовым-то как-то не очень! Как правило, все настройки находятся в конфиг-файлах; а при необходимости что-то поменять, посылаем сервису сигнал о необходимости "перечитать" конфиг, и усё! И вообще, нЕхрен "прикручивать" к "копеешному" сервису "тысячерублёвый" интерфейс.
Да нет, у меня была задача по взлому пароля одного запароленного rar-архива ну я написал сервачок, и клиент к нему. Взламывал по словарю. Клиенты отправляли серверу запрос на очередную порцию паролей и сервер отсылал еще не проверенные записи из словаря если пароль находился сервак останавливался с выдачей этого самого пароля и имени машины на котором все стало известно Wink. Так вот, раскидал копии архива с клиентами по машинам в классе и осуществил распределенную атаку на архив по словарю. Very Happy Вооот, а для моделирования физических процессов нужно распределять вычисления характеристик по тем же машинам в зависимости от времени например, чтобы сервер получал уже вычисленные величины. Ну например делить секунду на 10 частей и каждый клиент, получив определенную функцию, вычисляет десять значений функции в зависимости от времени, полученные результаты отправляет на сервак. Сервак же в свою очередь тупо подставляет полученные величины для отображения процесса. Вощем пока все пашут, сервер занимается рисованием. Mr. Green
Опа! По моим представлениям (если только не вышло соответствующее распоряжение ВЦСПС и ЦК ВЛКСМ), термины "сервер" и "клиент" во всем этом опусе следует поменять местами

зы. А причем здесь сокеты?
ззы. По-настоящему райская (для програмиста) ОС - UNIX (любой). Но это большой секрет, тссс.
С уважением,
Vladimir Gerasimov (aka vag)

Аватара пользователя
AL
Старшекурсник
Сообщения: 361
Зарегистрирован: Чт, 13.04.2006 08:20

Сообщение AL » Ср, 18.10.2006 13:38

И вообще, нЕхрен "прикручивать" к "копеешному" сервису "тысячерублёвый" интерфейс.
Гы... именно поэтому клиент быстрее наколбасить, точнее "накликать" в какой-нибудь "визуальной" среде... типа Delphi (или есть замечения, предложения, усмешки?)
... и вообще.. :D приятно видеть, что сервачок регирует на команды... так сказать в real-time, вместо того, чтобы посылать ему новый конфиг, или дописывая/переписывая его с помощью того же сервачка давать команды ""перечитать" конфиг"
А причем здесь сокеты?
Хм... как мне помниться... не так давно многоуважаемый vag советовал юному postal'у (дабы "изучить сокеты") разобраться с функциями socket(), bind(), accept() т.к. "корень зла в них".
Пусть в топике и не было упоминания о них, однако... был как-то на досуге построен сервис работающий с сокетом в блокирующем режиме. Понятно, что этот примитив мало кого устроит, поэтому "прознав" про работу с сокетами в асинхронном режиме, да ещё и основанном на событиях на этих самых сокетах, решили переписать програмку... Однако с реализацией этого мега-проекта возникли проблемы... так что, как гласит табличка на многих web-проектах, under construction.

Аватара пользователя
Destion
Дипломник
Сообщения: 544
Зарегистрирован: Ср, 14.06.2006 17:47

Сообщение Destion » Ср, 18.10.2006 15:04

vag писал(а):Опа! По моим представлениям (если только не вышло соответствующее распоряжение ВЦСПС и ЦК ВЛКСМ), термины "сервер" и "клиент" во всем этом опусе следует поменять местами
"Боря, ты не прав" (с) в своем опусе я опирался исключительно на названия использованных компонентов, и что удивительно: сервер, в котором использовался IdTCPServer, у меня занимался рассылкой паролей, а клиент на IdTCPClient занимался конкретно взломом архива. Но это так мелачи. ;) Внимательней при чтении, тогда помышлять о кознях ЦК не придется. Но в целом, как мне известно, понятия клиент и сервер в смысле идеологическом не имеют строгого толкования. ;)
1 Терапевт - это 1024 Гигапевта или 1048576 Мегапевтов.

Аватара пользователя
vag
из зажрамшихся
Сообщения: 577
Зарегистрирован: Пт, 13.02.2004 18:50
Откуда: физ.-мат. деревня Глазов

Сообщение vag » Чт, 19.10.2006 13:38

быстрее наколбасить, точнее "накликать" в какой-нибудь "визуальной" среде
Если стоИт задача именно "наколбасить", то тогда, пожалуй, соглашусь. Если же цель - понять, как это всё работает,- то ничего хорошего из "накликивания [беды]" не выйдет: всё будет завершаться вопросом, с которого и началась данная тема (а-ля "А что это у меня там в носу?")
приятно видеть, что сервачок регирует на команды... так сказать в real-time
Никто и не запрещает видеть... Как правило, это реализуется через вывод инфо- и дебаг-сообщений в лог-файлы.
И ещё раз: перед тем, как "изобретать велосипед", рекомендую пересилить себя и посмотреть, какие "интерфейсы" у "боевых" серверов (возьми, например, apache, или mysql, или даже коммерческий oracle): изменение настроек - только через перечитывание конфиг-файлов, вывод - в лог-файлы, а любое взаимодействие - только через соответствующего клиента. И это правильно!
Хм... как мне помниться... не так давно многоуважаемый vag советовал юному postal'у (дабы "изучить сокеты") разобраться с функциями socket(), bind(), accept() т.к. "корень зла в них".
Говорил. И продолжаю говорить... Могу ещё добавить select() или poll() (хотя, возможно, что реализация poll() под "форточками" отсутствует), а также "макросы" FD_ZERO(), FD_SET(), FD_ISSET(). Возможно, это именно то, что вам в настоящий момент не хватает "для счастья".
Внимательней при чтении
Мне можно "вменять" массу различных недостатков (чего стОит хотя бы патологическая ворчливость или язвительный сарказм (кстати AL, кажется, тоже не лишен этого дара)), но обвинять меня в НЕВНИМАТЕЛЬНОСТИ_ПРИ_ЧТЕНИИ - это явный перебор! Щас же пойду, заблокирую интернет-аккаунт :-)
...в своем опусе я опирался исключительно на названия использованных компонентов... ...понятия клиент и сервер в смысле идеологическом не имеют строгого толкования
Потрясающая логика! Стало быть, если я, к примеру, отрезаю кусок хлеба при помощи инструмента с названием "Нож для разделки мяса", то результат моей работы надо называть не иначе как "разделанное мясо"?!
НЕТ, такое не "прокатывает"! Тот, кто формирует запросы и "пользует" результаты их выполнения - клиент; те, кто в "поте лица" эти запросы обрабатывают - серверы
Последний раз редактировалось vag Чт, 19.10.2006 14:46, всего редактировалось 1 раз.
С уважением,
Vladimir Gerasimov (aka vag)

Аватара пользователя
Destion
Дипломник
Сообщения: 544
Зарегистрирован: Ср, 14.06.2006 17:47

Сообщение Destion » Чт, 19.10.2006 14:25

vag писал(а):НЕТ, такое не "прокатывает"! Тот, кто формирует запросы и "пользует" результаты их выполнения - клиент; те, кто в "поте лица" эти запросы обрабатывают - серверы
Помоему дело даже не в чтении и скорее всего не в сарказме, дело в чем-то другом. :) Теперь о толковании терминов, вне зависимости кто что делает, связь в "клиент-серверных" приложениях двухсторонняя, и в одно и то же время одна и та же компонента может быть как клиентом так и сервером по твоему определению.

Кроме того на очередную порцию паролей отправлял запрос клиент. Получив ее, в простеньком цикле, посредствам вызова внешнего приложения разархивирования (это туговатый путь, но в рардлл-ке копаться было некогда) распаковывал с подстановкой очередного пароля. Проверял не пустая ли папка куда распаковывался архив и так далее если папка, о чудо, не пустая, значит процесс можно прервать и сообщить серверу, что все в порядке. Итак на этапе получения паролей компоненты были сервером - источник паролей и клиентом - получатель паролей в твоем же понимании. А на этапе разархивирования сервером процесса разархивирования становился клиент, а сервер в свою очередь становился клиентом ждущим результата архивирования. А в целом названный мною сервер на IdTCPServer осуществлял координацию между клиентами процесса подбора пароля к архиву. Так что точного толкования термина клиент и сервер уже давно нет, есть понятие клиент-серверной архитектуры приложения, а термины клиент и сервер устанавливаются в зависимости от задачи которую описывают на данный момент. То есть относительно раздачи паролей IdTCPServer был сервером, относительно разархивирования выданная порция паролей становилась запросом, а искомый IdTCPServer превращался в клиента.
1 Терапевт - это 1024 Гигапевта или 1048576 Мегапевтов.

Аватара пользователя
vag
из зажрамшихся
Сообщения: 577
Зарегистрирован: Пт, 13.02.2004 18:50
Откуда: физ.-мат. деревня Глазов

Сообщение vag » Чт, 19.10.2006 14:52

Вай дарагой, называй, как хочещь!

Кстати в клиент-серверных "делах" есть термин, весьма подходящий к описываемому тобой "безобразию": "диспетчер" (dispatcher) [запросов].
С уважением,
Vladimir Gerasimov (aka vag)

Аватара пользователя
AL
Старшекурсник
Сообщения: 361
Зарегистрирован: Чт, 13.04.2006 08:20

Сообщение AL » Чт, 19.10.2006 14:53

WSAWaitForMultipleEvents(2,@Event[0],True,WSA_Infinite,False)
Event[] - массив событий на сокете, в котором, как я (казалось) понял должны быть константы WSA_Wait_Event_0 и т.д. но... оказалось не так все просто.
Так что именно должен содержать этот массив? Только, плиз, на пальцах :shock:
ps извиняюсь за тупые вопросы.

Аватара пользователя
Destion
Дипломник
Сообщения: 544
Зарегистрирован: Ср, 14.06.2006 17:47

Сообщение Destion » Чт, 19.10.2006 15:27

Нет ну что за народ лентяистый пошел хуже меня. :D Берем словарик и вникаем-вникаем. ;)

Код: Выделить всё

The Windows Sockets WSAWaitForMultipleEvents function returns either when one or all of the specified event objects are in the signaled state, or when the time-out interval expires.
DWORD WSAWaitForMultipleEvents(
    DWORD cEvents,	
    const WSAEVENT FAR *lphEvents,	
    BOOL fWaitAll,	
    DWORD dwTimeOUT,	
    BOOL fAlertable);
    ...
Return Values
If the function succeeds, the return value indicates the event object that caused the function to return.
If the function fails, the return value is WSA_WAIT_FAILED. To get extended error information, call WSAGetLastError.
The return value upon success is one of the following values:
WSA_WAIT_EVENT_0 to (WSA_WAIT_EVENT_0 + cEvents - 1) 	If fWaitAll is TRUE, the return value indicates that the state of all specified event objects is signaled. If fWaitAll is FALSE, the return value minus WSA_WAIT_EVENT_0 indicates the lphEvents array index of the object that satisfied the wait.
    ...
See Also
WSACloseEvent, WSACreateEvent
Хелп в дельфях рулит. ;)
1 Терапевт - это 1024 Гигапевта или 1048576 Мегапевтов.

Аватара пользователя
AL
Старшекурсник
Сообщения: 361
Зарегистрирован: Чт, 13.04.2006 08:20

Сообщение AL » Чт, 19.10.2006 16:17

И что?
Пасибо конечно, но для чего ты выложил сюда часть хэлпа? Ты бы сначала спросил, читал ли я его. Да читал... давно... однако все ещё помню что там написано.
Да, вот ещё что.
Без словарика три эти строчки правильного англицкого текста понять гораздо проще и быстрее нежели копаясь в словаре, а для этого неплохо бы ... слегка потренироваться со всякими там "учебными" текстами плавно переходя на чтение.... ммм... англицкой прессы на пример и технической литературы (для чего отлично подходит MSDN).

Аватара пользователя
vag
из зажрамшихся
Сообщения: 577
Зарегистрирован: Пт, 13.02.2004 18:50
Откуда: физ.-мат. деревня Глазов

Сообщение vag » Пт, 20.10.2006 12:02

Вторая переменная для системного вызова WSAWaitForMultipleEvents() - указатель на массив, элементами которого являются хэндлы событий (Event handles).
А вообще, чтобы понять, в чём проблема, необходимо посмотреть, какое значение возвращает вызов WSAWaitForMultipleEvents() и допоолнительно проверить WSAGetLastError().

И кстати, hint: все WSA-функции имеют место быть ТОЛЬКО в "форточках", а посему любую программу, их (эти функции) использующую, трудно портировать на платформы, отличные от мастдайных (а такая необходимость возникает, и нередко)
С уважением,
Vladimir Gerasimov (aka vag)

Аватара пользователя
AL
Старшекурсник
Сообщения: 361
Зарегистрирован: Чт, 13.04.2006 08:20

Сообщение AL » Пт, 20.10.2006 17:47

Ура! Заработало! Сделан маленький шажок к построению програмулины пользующей сокеты в асинхронном режиме на событиях.
Вторая переменная ... - указатель на массив, элементами которого являются хэндлы событий (Event handles).
Эти самые хэндлы создаем сначала с помощью WSACreateEvent!
...и допоолнительно проверить WSAGetLastError().
Мдя. Зная о существовании этой функции не применять её - тупизм (который проявился у меня %( - гулять надо бы больше).
все WSA-функции имеют место быть ТОЛЬКО в "форточках
Не есть радостное примечание. Хотя по аббревиатуре WSA трудно не догадаться.

tnx

Аватара пользователя
vag
из зажрамшихся
Сообщения: 577
Зарегистрирован: Пт, 13.02.2004 18:50
Откуда: физ.-мат. деревня Глазов

Сообщение vag » Пт, 20.10.2006 20:31

tnx
alws pls
С уважением,
Vladimir Gerasimov (aka vag)

Ответить