Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Клиент серверное приложение. Одновременная работа? 
V
    Опции темы
WaReZMEN
Дата 19.8.2008, 03:44 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Делаю на IdTCPServer и IdTCPClient
Так вот с одним пользователем все понятно и все отлично работает... как реализовать работу с несколькими пользователями одновременно? То есть хочу от них получать потоки по запросу отправлять им патоки ну или скажем только некоторым из низ отправлять потоки. Подскажите плиз как сделать????
 smile 
PM MAIL ICQ   Вверх
Matematik
Дата 19.8.2008, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



http://www.indyproject.org/Sockets/Demos/index.EN.aspx
Скачай Indy 9 Demo, там есть пример чата на IdTCPServer
PM MAIL WWW ICQ   Вверх
WaReZMEN
Дата 19.8.2008, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Matematik, Чат не то что мне нужно у меня там беспрерывный (почти) идет обмен файлами от 10кб до 2 метров. Да и к томуже нужно под Indy 10

Это сообщение отредактировал(а) WaReZMEN - 19.8.2008, 08:33
PM MAIL ICQ   Вверх
Snowy
Дата 19.8.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(WaReZMEN @  19.8.2008,  03:44 Найти цитируемый пост)
Так вот с одним пользователем все понятно и все отлично работает... как реализовать работу с несколькими
ТIdTCPServer - это сервер. Многопоточный. Обслуживает N подключений одновременно. На каждое подключение создаёт свой тред.
Так в чём тогда вопрос? Не понятно...
Если только ты не забиндил клиентский порт.
Тогда не сможет несколько обслуживать - порт занят.
PM MAIL   Вверх
WaReZMEN
Дата 19.8.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Snowy, к примеру у TIdTCPServer в execute принемается информация от клиента отправляется ему ответ. так вот не совсем понятно как определить что иммено нужному клиенту отправляется то что нужно... еслиб был маленький пример былоб проще понять если нужно могу выложить исходник сервера...
PM MAIL ICQ   Вверх
Snowy
Дата 19.8.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



На нижнем уровне TCP/IP клиентов ты можешь различать только по IP/Port
Если нужно различать по логину/паролю или пр., то нужно разрабатывать протокол.
Собственно ни один обмен данными не обходится без протокола. Собственного или существующего.
Так вот, как тыбудешь различать клиентов, это уже вопрос к тебе.
Что в твоём понимании клиент - зависит от твоих целей.
Вся нужная информация о соединении тебе передаётся в Context.
В свойстве Socket можешь узнать хост и порты.
Также есть свойство Data, которое ты можешь использовать для своих нужд. Например для связки соединение-клиент, или для указания на любой объект, переменную и т.д. Зависит от целей.

Вобщем для решения задачи все средства есть. А вот твоя задача - сформулировать задачу, и только потом реализовать.
А пока совершенно не понятно, что ты хочешь.
Сформулируй задачу. Напиши план. Определись с понятиями. Создай постановку и распиши протокол обмена.
PM MAIL   Вверх
WaReZMEN
Дата 20.8.2008, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Snowy, 
Цитата(Snowy @  19.8.2008,  21:31 Найти цитируемый пост)
можешь различать только по IP/Port

Ну порт то у всех один и тотже... да и IP не у никальный скажем если пару компов через одну прокси сидят то и соответствено внешний IP у них одинаковый.
Что есть: 
Код

var
   MStream: TMemoryStream;
....
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
  Len:String;
begin
     len:=AContext.Connection.IOHandler.ReadLn;
     AContext.Connection.IOHandler.ReadStream(MStream, StrToInt(Len), FALSE);
     MStream.Position:=0;
     Memo1.Lines.LoadFromStream(MStream);

     Memo1.Lines.Add(AContext.Connection.IOHandler.ReadLn);
     
     AContext.Connection.IOHandler.WriteLn('OK');
end;

в IdTCPServer1Execute выполняется получения файла и отправляется ответ клиенту каторый подконекчен. Если клиентов будет больше одного то не понятно как тут что произоидет? 
Хочется Сделать пару кнопок на серверен при на жатий на каторые отправлялись команды на запрос файла от клиента. Но сдесь становится не понятно как я отправлю имеено тому клиенту каторому нужно. в приеме у меня  есть AContext.Connection.IOHandler и я отправляю ответ тому каму кто законекчен а если делать отдельной кнопкои становится не ясно как это сделать...  smile 

Еще вопросик:
Ситуация когда клиент запущен а сервер нет у меня в клиенте есть таимер он каждые 5 секунд пытается подключится к серверу
Код

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    IdTCPClient1.ConnectTimeout:=1;
    try
      if NOt IdTCPClient1.Connected then  IdTCPClient1.Connect
    except
    end;
end;

Но это все шутко замедляет работу клиента... а хотелось бы чтоб клиент продолжал рабоать буддто ничего не происходит... smile  

Это сообщение отредактировал(а) WaReZMEN - 20.8.2008, 08:28
PM MAIL ICQ   Вверх
Snowy
Дата 20.8.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Цитата(WaReZMEN @  20.8.2008,  00:06 Найти цитируемый пост)
Ну порт то у всех один и тотже...
Это с какого такого перепугу?
Какой порт на той стороне - это не тебе решать. Ты определяешь только порт сервера.

Цитата(WaReZMEN @  20.8.2008,  00:06 Найти цитируемый пост)
да и IP не у никальный
IP нет. А вот пара IP/Port - да.

Цитата(WaReZMEN @  20.8.2008,  00:06 Найти цитируемый пост)
Если клиентов будет больше одного то не понятно как тут что произоидет? 
Фигня полная произойдёт. Нарушение совместного доступа. И, в лучшем случае, просто не будет работать. В худшем, навернётся твой сервер нафиг.
Сервер - многопоточное приложение. А многопоточность требует крайней аккуратности и распределения.
1. Ну нафига тебе глобальный MemoryStream? Либо делай локальный для каждого треда, либо глобальный блок памяти, например массив. А мемористрим тут совсем не годится - его каждый тред модифицировать будет.
2. При одновременном достуме, изменяющем данные, нужно делать синхронизацию между тредами.


Цитата(WaReZMEN @  20.8.2008,  00:06 Найти цитируемый пост)
 и я отправляю ответ тому каму кто законекчен а если делать отдельной кнопкои становится не ясно как это сделать...
Ну ты же сервер. Ты можешь отправить только тем, кто законекчен.
Если ты осуществляешь подключение, то ты уже не сервер, а клиент.
PM MAIL   Вверх
WaReZMEN
Дата 20.8.2008, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Snowy, а с этим что посоветуете?

Цитата(WaReZMEN @  20.8.2008,  08:06 Найти цитируемый пост)
Ситуация когда клиент запущен а сервер нет у меня в клиенте есть таимер он каждые 5 секунд пытается подключится к серверу

Код

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    IdTCPClient1.ConnectTimeout:=1;
    try
      if NOt IdTCPClient1.Connected then  IdTCPClient1.Connect
    except
    end;
end;





Но это все жутко замедляет работу клиента... а хотелось бы чтоб клиент продолжал рабоать буддто ничего не происходит...



Это сообщение отредактировал(а) WaReZMEN - 20.8.2008, 14:25
PM MAIL ICQ   Вверх
Snowy
Дата 20.8.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Антифриз на форму брось

Модератор: Пожалуйста, один топик - один вопрос.
PM MAIL   Вверх
MetalFan
  Дата 20.8.2008, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



 smile 
офф: интересно, а во ************ все такие "грамотеи"?

Это сообщение отредактировал(а) MetalFan - 21.8.2008, 12:35


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
WaReZMEN
Дата 20.8.2008, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



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

Snowy, спасибо за помощь! +

Это сообщение отредактировал(а) WaReZMEN - 20.8.2008, 23:57
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0619 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.