Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2013, 05:30   #1
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию Delphi передача данных

Всем привет. Задачка такая:

при подключении к серверу сервер получает некоторые данные от клиента. ( использую IdTCPServer )
При отключении клиента, сервер должен использовать эти данные ...

А как передать их по сути дела от одной функции к другой, я как раз не знаю ( к примеру client_name )

Код:
procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
var
  client_name: String;
begin
...

  client_name:= AContext.Connection.Socket.ReadLn();
...
end;


procedure TForm1.IdTCPServer1Disconnect(AContext: TIdContext);
begin
 {
 ???
 }
end;
-Jack- вне форума Ответить с цитированием
Старый 14.11.2013, 06:42   #2
Vad33
Участник клуба
 
Аватар для Vad33
 
Регистрация: 24.07.2009
Сообщений: 638
По умолчанию

Может переменную сделать глобальной?
** Удача терпелива. **
Vad3333@inbox.ru
Vad33 вне форума Ответить с цитированием
Старый 14.11.2013, 07:38   #3
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

хммммм может не те свойства юзаете? Может надо IdTCPServer1Execute.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 14.11.2013, 14:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Насколько я знаю при подключении сервер ничего не должен получать.
Он может отправить подключившемуся приветствие.
Как устроен клиент? Он видимо отправляет данные после подключения сразу, а твой сервер должен их прочитать в событии OnWork кажись так называется.
Причем клиенту стоит выделить некую команду типа HELO с которой передать нужные данные, а сервер должен проанализировать команду, и понять что то что после нее запомнить до дисконнекта.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.11.2013, 17:03   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Более адекватная альтернатива глобальной переменной - поле\свойство(property) формы или специального класса (который надо будет написать)
phomm вне форума Ответить с цитированием
Старый 14.11.2013, 18:30   #6
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Цитата:
Сообщение от Vad33 Посмотреть сообщение
Может переменную сделать глобальной?
Хм ... идея хорошая ... А как раз так и делал раньше ... IdTCPServer1Connect создаю глобальную переменную на пример TStringList и уже с ней работаю ...

Цитата:
Сообщение от BARNEY Посмотреть сообщение
хммммм может не те свойства юзаете? Может надо IdTCPServer1Execute.
В принципе, можно осуществить обмен данными и на IdTCPServer1Execute ... Но та конструкция клиент-сервера у меня работает нормально: при подключении обмен данными и уже дальнейшая обработка данными в IdTCPServer1Execute

Цитата:
Сообщение от Stilet Посмотреть сообщение
Насколько я знаю при подключении сервер ничего не должен получать.
Он может отправить подключившемуся приветствие.
Как устроен клиент? Он видимо отправляет данные после подключения сразу, а твой сервер должен их прочитать в событии OnWork кажись так называется.
Причем клиенту стоит выделить некую команду типа HELO с которой передать нужные данные, а сервер должен проанализировать команду, и понять что то что после нее запомнить до дисконнекта.
Почему при подключении нельзя ничего получать ? По сути дела это зависит же от структуры клиент сервера ? А вот по поводу команды HELO не понял ...

Цитата:
Сообщение от phomm Посмотреть сообщение
Более адекватная альтернатива глобальной переменной - поле\свойство(property) формы или специального класса (который надо будет написать)
А чем глобальная переменная не подошла ?
-Jack- вне форума Ответить с цитированием
Старый 14.11.2013, 18:53   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Почему при подключении нельзя ничего получать ?
Видимо я не понял твоей задачи. Извиняюсь за дезу, я подумал что ты от клиента пустую строку получаешь.
Цитата:
А чем глобальная переменная не подошла ?
Она тоже подойдет, если ты этот код не будешь использовать в разных сопроцессах.
А вообще это хороший тон заводить свойство и использовать его, но не более чем рекомендация.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.11.2013, 21:59   #8
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Видимо я не понял твоей задачи. Извиняюсь за дезу, я подумал что ты от клиента пустую строку получаешь.

Она тоже подойдет, если ты этот код не будешь использовать в разных сопроцессах.
А вообще это хороший тон заводить свойство и использовать его, но не более чем рекомендация.
Да не, клиент сервер нормально обмениваются данными ... загвоздка такая:

объявил глобальную переменную
Код:
var
Form1:TForm1;
T:TStringList
при подключении клиента создаю этот лист
Код:
procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
var
  client_name: String;
begin
...
  client_name:= AContext.Connection.Socket.ReadLn();
  T:=TStringList.Create;
  T.add (client_name);
...
end;

procedure TForm1.IdTCPServer1Disconnect(AContext: TIdContext);
begin
  sys.Lines.Add('SYS:'+T[0] );
end;
И получается, что T[0] всегда имеет значение client_name последнего подключенного клиента ...
-Jack- вне форума Ответить с цитированием
Старый 14.11.2013, 22:05   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

StringList создать в OnCreate формы
Убивать его в OnDestroy формы
В OnDisconnect искать имя клиента в StringList и работать с нужной строкой, а не с нулевым индексом. И удалить её
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.11.2013, 22:12   #10
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Т.е. вариант, когда для каждого клиента будет создаваться свой StringList не получится ?
-Jack- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi и InterBase. Синхронная передача данных Sunde БД в Delphi 1 17.04.2011 20:16
Передача данных из сохраненного отчета FastReport в Delphi HIC БД в Delphi 12 12.11.2008 17:28
Передача данных на сервер с помощью Delphi Арес Работа с сетью в Delphi 7 10.03.2008 13:29
Передача данных из VC++ DLL в Delphi App Kosoglaz Общие вопросы C/C++ 2 05.02.2008 10:53