![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| WaReZMEN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Делаю на IdTCPServer и IdTCPClient
Так вот с одним пользователем все понятно и все отлично работает... как реализовать работу с несколькими пользователями одновременно? То есть хочу от них получать потоки по запросу отправлять им патоки ну или скажем только некоторым из низ отправлять потоки. Подскажите плиз как сделать???? |
|||
|
||||
| Matematik |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 24 Всего: 50 |
http://www.indyproject.org/Sockets/Demos/index.EN.aspx
Скачай Indy 9 Demo, там есть пример чата на IdTCPServer |
|||
|
||||
| WaReZMEN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Matematik, Чат не то что мне нужно у меня там беспрерывный (почти) идет обмен файлами от 10кб до 2 метров. Да и к томуже нужно под Indy 10
Это сообщение отредактировал(а) WaReZMEN - 19.8.2008, 08:33 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Так в чём тогда вопрос? Не понятно... Если только ты не забиндил клиентский порт. Тогда не сможет несколько обслуживать - порт занят. |
|||
|
||||
| WaReZMEN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Snowy, к примеру у TIdTCPServer в execute принемается информация от клиента отправляется ему ответ. так вот не совсем понятно как определить что иммено нужному клиенту отправляется то что нужно... еслиб был маленький пример былоб проще понять если нужно могу выложить исходник сервера...
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
На нижнем уровне TCP/IP клиентов ты можешь различать только по IP/Port
Если нужно различать по логину/паролю или пр., то нужно разрабатывать протокол. Собственно ни один обмен данными не обходится без протокола. Собственного или существующего. Так вот, как тыбудешь различать клиентов, это уже вопрос к тебе. Что в твоём понимании клиент - зависит от твоих целей. Вся нужная информация о соединении тебе передаётся в Context. В свойстве Socket можешь узнать хост и порты. Также есть свойство Data, которое ты можешь использовать для своих нужд. Например для связки соединение-клиент, или для указания на любой объект, переменную и т.д. Зависит от целей. Вобщем для решения задачи все средства есть. А вот твоя задача - сформулировать задачу, и только потом реализовать. А пока совершенно не понятно, что ты хочешь. Сформулируй задачу. Напиши план. Определись с понятиями. Создай постановку и распиши протокол обмена. |
|||
|
||||
| WaReZMEN |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Snowy,
Ну порт то у всех один и тотже... да и IP не у никальный скажем если пару компов через одну прокси сидят то и соответствено внешний IP у них одинаковый. Что есть:
в IdTCPServer1Execute выполняется получения файла и отправляется ответ клиенту каторый подконекчен. Если клиентов будет больше одного то не понятно как тут что произоидет? Хочется Сделать пару кнопок на серверен при на жатий на каторые отправлялись команды на запрос файла от клиента. Но сдесь становится не понятно как я отправлю имеено тому клиенту каторому нужно. в приеме у меня есть AContext.Connection.IOHandler и я отправляю ответ тому каму кто законекчен а если делать отдельной кнопкои становится не ясно как это сделать... Еще вопросик: Ситуация когда клиент запущен а сервер нет у меня в клиенте есть таимер он каждые 5 секунд пытается подключится к серверу
Но это все шутко замедляет работу клиента... а хотелось бы чтоб клиент продолжал рабоать буддто ничего не происходит... Это сообщение отредактировал(а) WaReZMEN - 20.8.2008, 08:28 |
||||
|
|||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Это с какого такого перепугу?
Какой порт на той стороне - это не тебе решать. Ты определяешь только порт сервера. IP нет. А вот пара IP/Port - да.
Сервер - многопоточное приложение. А многопоточность требует крайней аккуратности и распределения. 1. Ну нафига тебе глобальный MemoryStream? Либо делай локальный для каждого треда, либо глобальный блок памяти, например массив. А мемористрим тут совсем не годится - его каждый тред модифицировать будет. 2. При одновременном достуме, изменяющем данные, нужно делать синхронизацию между тредами.
Если ты осуществляешь подключение, то ты уже не сервер, а клиент. |
||||
|
|||||
| WaReZMEN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Snowy, а с этим что посоветуете?
Это сообщение отредактировал(а) WaReZMEN - 20.8.2008, 14:25 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Антифриз на форму брось
Модератор: Пожалуйста, один топик - один вопрос. |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
офф: интересно, а во ************ все такие "грамотеи"? Это сообщение отредактировал(а) MetalFan - 21.8.2008, 12:35 -------------------- There are always someone smarter than you... |
|||
|
||||
| WaReZMEN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
MetalFan, Нет только я один
Snowy, спасибо за помощь! + Это сообщение отредактировал(а) WaReZMEN - 20.8.2008, 23:57 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |