powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обслуживание нескольких клиентов в разных потоках
16 сообщений из 16, страница 1 из 1
Обслуживание нескольких клиентов в разных потоках
    #32935478
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу понять, как организовать обслуживание нескольких клиентов.

Есть ICQ программа (один номер аськи), с которой несколько клиентов (удаленных - из инета) общаются (присылают файлы, запросы, обратно получают файлы).

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

И по отсоединении клиента или по неактивности - убивать процесс.

Как создать процесс, как организовать взаимодействие с основной программой (отдавать\получать строки) ? Где бы посмотреть описание и пример подобной программы?
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32935566
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо писать, какое средство разработки и какая ось у Вас.
И на каком уровне работаете вообще.

А абстрактно, если с сокетами - то
когда сделан accept() - тут надо порождать новый thread(Java or WinAPI) или fork()-аться (Unix),
передавая дочернему потоку(процессу) дескриптор сокета.
И дальше с ним работать и умереть.
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32935574
miniСЛОН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--null--надо писать, какое средство разработки и какая ось у Вас.
И на каком уровне работаете вообще.

А абстрактно, если с сокетами - то
когда сделан accept() - тут надо порождать новый thread(Java or WinAPI) или fork()-аться (Unix),
передавая дочернему потоку(процессу) дескриптор сокета.
И дальше с ним работать и умереть.
а чем Unix хуже, там тоже треды есть. причем несколько реализаций :)
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32935578
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конечно есть, это я так, для примера :-)
Нам ваще неизвестно, в какой среде человек пишет.
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32935579
miniСЛОН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кстати, можно вообще без потоков обойтись воспользоваться select()'ом
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32935580
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он хочет в отдельном потоке.
клиент всегда прав (c)
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32936256
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--конечно есть, это я так, для примера :-)
Нам ваще неизвестно, в какой среде человек пишет.
Спасибо за столь живое участие!

1) Программа - клиент ICQ - который принимает и отправляет строки - есть готовый (у него есть событие - "пришла строка от такого-то", есть функция - "отправить строку по такому-то номеру аськи"), на Delphi, ОС - WIN2000

2) Надо к этому клиенту приделать обработчик запросов пользователей - отдавать обработчику строки, и принимать от обработчиков строки.

3) "он хочет в отдельном потоке.
клиент всегда прав (c)" -
Как сделать без потоков - научите, буду делать без потоков. Просто хотелось обрабатывать клиентов не последвательно (пока работаем с одним - остальные ждут), а паралельно, сколько бы их не было (1-10 штук),
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32936355
miniСЛОН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользователь3) "он хочет в отдельном потоке.
клиент всегда прав (c)" -
Как сделать без потоков - научите, буду делать без потоков. Просто хотелось обрабатывать клиентов не последвательно (пока работаем с одним - остальные ждут), а паралельно, сколько бы их не было (1-10 штук),
в C это делается при помощи select
к описанной системе с событиями наверное не стоит прикручивать. select сам как система событий
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32936501
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select это наверное не в си, а в библиотеке сокетов.
поскольку я использовал select и в delphi :-)
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32937338
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_kselect это наверное не в си, а в библиотеке сокетов.
поскольку я использовал select и в delphi :-)

The select function determines the status of one or more sockets, waiting if necessary, to perform synchronous I/O.

На кой мне сокеты?
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32937350
miniСЛОН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользователь alex_kselect это наверное не в си, а в библиотеке сокетов.
поскольку я использовал select и в delphi :-)

The select function determines the status of one or more sockets, waiting if necessary, to perform synchronous I/O.

На кой мне сокеты?
а через что вы с клиентами общаетесь?
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32937353
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПользовательПрограмма - клиент ICQ - который принимает и отправляет строки


авторНа кой мне сокеты?


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


Кстати, насколько я знаю, классический select работает не только с сокетами,
но вообще с разными дескрипторами (файловыми и т.д.)

"The functions select and pselect wait for a number of file descriptors
to change status."

Это Микрософт ее в winsock записал :-)
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32937362
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прочитал еще раз :-)

Короче вот что Вам нужно - по приходе строчки сделать CreateThread()
и дальше работать в новой нити.
Третий параметр CreateThread() - собсна функция нити, а четвертый - указатель на ее аргументы.
Таким образом можно в нить передать строчку.
Дальше в нити ее можно обрабатывать и вернуть - ну тут любой способ.
Нить в принципе видит все глобальные переменные процесса, поэтому можно поосто создать соответствующие списки и привязывать их элементы к порождаемым нитям или можно возвращать из нити значение с помощью какого-нибудь механизма IPC (того же канала).
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32937675
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--прочитал еще раз :-)

Короче вот что Вам нужно - по приходе строчки сделать CreateThread()
и дальше работать в новой нити.
Третий параметр CreateThread() - собсна функция нити, а четвертый - указатель на ее аргументы.
Таким образом можно в нить передать строчку.
Дальше в нити ее можно обрабатывать и вернуть - ну тут любой способ.
Нить в принципе видит все глобальные переменные процесса, поэтому можно поосто создать соответствующие списки и привязывать их элементы к порождаемым нитям или можно возвращать из нити значение с помощью какого-нибудь механизма IPC (того же канала).

1) Создать нить - буду разбираться - позжее доложу,
2) вернуть строку из нити - что есть IPC? И вообще - когда создаю нить - все понятно, а когда возвращаю строку - как отследить в основной программе событие - "такая то нить хочет вернуть строку данных"?
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32937691
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IPC - inter process comminucation
довольно расплывчатое понятие, хотя может быть есть некий стандартный механизм ipc.
под виндой любят pipe использовать
...
Рейтинг: 0 / 0
Обслуживание нескольких клиентов в разных потоках
    #32937883
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора когда возвращаю строку - как отследить в основной программе событие

для этого есть объекты синхронизации.
Например, можно создать Mutex, занять его а потом WaitFroSingleObject или использовать Event-ы или еще что-то.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обслуживание нескольких клиентов в разных потоках
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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