| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Клиент серверное приложение. Одновременная работа? |
| Автор: WaReZMEN 19.8.2008, 03:44 |
| Делаю на IdTCPServer и IdTCPClient Так вот с одним пользователем все понятно и все отлично работает... как реализовать работу с несколькими пользователями одновременно? То есть хочу от них получать потоки по запросу отправлять им патоки ну или скажем только некоторым из низ отправлять потоки. Подскажите плиз как сделать???? |
| Автор: Matematik 19.8.2008, 07:54 |
| http://www.indyproject.org/Sockets/Demos/index.EN.aspx Скачай Indy 9 Demo, там есть пример чата на IdTCPServer |
| Автор: WaReZMEN 19.8.2008, 08:05 |
| Matematik, Чат не то что мне нужно у меня там беспрерывный (почти) идет обмен файлами от 10кб до 2 метров. Да и к томуже нужно под Indy 10 |
| Автор: WaReZMEN 19.8.2008, 13:04 |
| Snowy, к примеру у TIdTCPServer в execute принемается информация от клиента отправляется ему ответ. так вот не совсем понятно как определить что иммено нужному клиенту отправляется то что нужно... еслиб был маленький пример былоб проще понять если нужно могу выложить исходник сервера... |
| Автор: Snowy 19.8.2008, 13:31 |
| На нижнем уровне TCP/IP клиентов ты можешь различать только по IP/Port Если нужно различать по логину/паролю или пр., то нужно разрабатывать протокол. Собственно ни один обмен данными не обходится без протокола. Собственного или существующего. Так вот, как тыбудешь различать клиентов, это уже вопрос к тебе. Что в твоём понимании клиент - зависит от твоих целей. Вся нужная информация о соединении тебе передаётся в Context. В свойстве Socket можешь узнать хост и порты. Также есть свойство Data, которое ты можешь использовать для своих нужд. Например для связки соединение-клиент, или для указания на любой объект, переменную и т.д. Зависит от целей. Вобщем для решения задачи все средства есть. А вот твоя задача - сформулировать задачу, и только потом реализовать. А пока совершенно не понятно, что ты хочешь. Сформулируй задачу. Напиши план. Определись с понятиями. Создай постановку и распиши протокол обмена. |
| Автор: WaReZMEN 20.8.2008, 00:06 | ||||
| Snowy, Ну порт то у всех один и тотже... да и IP не у никальный скажем если пару компов через одну прокси сидят то и соответствено внешний IP у них одинаковый. Что есть:
в IdTCPServer1Execute выполняется получения файла и отправляется ответ клиенту каторый подконекчен. Если клиентов будет больше одного то не понятно как тут что произоидет? Хочется Сделать пару кнопок на серверен при на жатий на каторые отправлялись команды на запрос файла от клиента. Но сдесь становится не понятно как я отправлю имеено тому клиенту каторому нужно. в приеме у меня есть AContext.Connection.IOHandler и я отправляю ответ тому каму кто законекчен а если делать отдельной кнопкои становится не ясно как это сделать... Еще вопросик: Ситуация когда клиент запущен а сервер нет у меня в клиенте есть таимер он каждые 5 секунд пытается подключится к серверу
Но это все шутко замедляет работу клиента... а хотелось бы чтоб клиент продолжал рабоать буддто ничего не происходит... |
| Автор: Snowy 20.8.2008, 14:17 | ||||
| Это с какого такого перепугу? Какой порт на той стороне - это не тебе решать. Ты определяешь только порт сервера. IP нет. А вот пара IP/Port - да.
Сервер - многопоточное приложение. А многопоточность требует крайней аккуратности и распределения. 1. Ну нафига тебе глобальный MemoryStream? Либо делай локальный для каждого треда, либо глобальный блок памяти, например массив. А мемористрим тут совсем не годится - его каждый тред модифицировать будет. 2. При одновременном достуме, изменяющем данные, нужно делать синхронизацию между тредами.
Если ты осуществляешь подключение, то ты уже не сервер, а клиент. |
| Автор: WaReZMEN 20.8.2008, 14:25 | ||||
Snowy, а с этим что посоветуете?
|
| Автор: Snowy 20.8.2008, 14:30 |
| Антифриз на форму брось Модератор: Пожалуйста, один топик - один вопрос. |
| Автор: MetalFan 20.8.2008, 16:23 |
| офф: интересно, а во ************ все такие "грамотеи"? |
| Автор: WaReZMEN 20.8.2008, 23:48 |
| MetalFan, Нет только я один Snowy, спасибо за помощь! + |