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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2013, 01:17   #21
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Теперь по теме: Столько постов а мне (лично) до сих пор не понятно о чем же она...
+1

Цитата:
Вот и вопрос, в чем оптимально хранить эти данные, чтобы их использовать в процедурах
храни в чем заблагорассудится..
чую сага о xyz
eval вне форума Ответить с цитированием
Старый 15.11.2013, 03:27   #22
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
храни в чем заблагорассудится..
чую сага о xyz
Знал бы, как реализовать, не писал бы сюда ...
-Jack- вне форума Ответить с цитированием
Старый 15.11.2013, 10:18   #23
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

знали бы что реализовать, может и помогли бы
eval вне форума Ответить с цитированием
Старый 17.11.2013, 00:51   #24
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
знали бы что реализовать, может и помогли бы
Такс ...

При подключении клиент серверу отправляет своё имя


Сервер

Код:
var
  client_name : String;

Код:
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin

  client_name:= AThread.Connection.ReadLn();
end;

А при отключении клиента от сервера, в мемо нужно вывести, что клиент ( его имя ) отключился от сервера


Код:
procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread);
begin
  memo1.Lines.Add('Disconnect: '+ client_name );
end;

При такой форме client_name содержит имя последнего подключившегося пользователя и в мемо выводится что то типа такого

Код:
Disconnect: Tester
Disconnect: Tester
Disconnect: Tester
Disconnect: Tester
Disconnect: Tester
Disconnect: Tester
Хотя подключались пользователи с разными именами

Последний раз редактировалось -Jack-; 17.11.2013 в 00:57.
-Jack- вне форума Ответить с цитированием
Старый 17.11.2013, 01:39   #25
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не так нужно делать. Все равно не поймешь. поэтому предложу самое простое:
Опиши переменку st:TStringList.
Код:
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
  st.values[AThread.Connection.Binding.PeerIP]:= AThread.Connection.ReadLn();
end;
Так ты заведешь список IP и их имен.
Код:
procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread);
begin
  memo1.Lines.Add('Disconnect: '+ st.values[AThread.Connection.Binding.PeerIP] );
  st.delete(st.names[st.values[AThread.Connection.Binding.PeerIP]]);
end;
Это один из простых способов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.11.2013, 01:41   #26
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не так нужно делать. Все равно не поймешь. поэтому предложу самое простое:
Опиши переменку st:TStringList.
Код:
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
  st.values[AThread.Connection.Binding.PeerIP]:= AThread.Connection.ReadLn();
end;
Так ты заведешь список IP и их имен.
Код:
procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread);
begin
  memo1.Lines.Add('Disconnect: '+ st.values[AThread.Connection.Binding.PeerIP] );
  st.delete(st.names[st.values[AThread.Connection.Binding.PeerIP]]);
end;
Это один из простых способов.

Способ отличный, он и подошёл бы, если не одно НО:

-случай если с 1 IP идёт несколько подключений ...
( немного доработал, сделал не только список IP, но добавил к нему список портов клиента ) думаю, на первое время пойдёт ...


Но вот ещё с чем столкнулся ... При относительно небольшой нагрузке ( 100 подключенных клиентов ) появляются ошибки

Код:
procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread);
begin
  memo1.Lines.Add('Disconnect: '+ st.values[AThread.Connection.Binding.PeerIP] );
  st.delete(st.names[st.values[AThread.Connection.Binding.PeerIP]]);
end;
В мемо выводится часто строчка об отключении клиента, в другой строчке... Данные, которые нужно добавлять в Мемо перемешиваются ... Т.е. Indy, выходит, что работает в 1 потоке ?

Последний раз редактировалось -Jack-; 17.11.2013 в 04:43.
-Jack- вне форума Ответить с цитированием
Старый 17.11.2013, 11:17   #27
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
случай если с 1 IP идёт несколько подключений
Ну и что? Пусть прокси-сервер этим занимается.
Цитата:
думаю, на первое время пойдёт
А я думаю что это неудачное решение. Лучше не портов а хендлов сокетов. Если я правильно понимаю в рамках одной сессии хендл подключенного сокета не меняется, и однозначно идентифицирует получателя в купе с IP адресом. Вот его бы я и хранил с IP как уникальный идентификатор.
Цитата:
Т.е. Indy, выходит, что работает в 1 потоке ?
Как раз наоборот, она каждое соединение (по крайней мере должна) вешает в новый поток, потому и мешанина у тебя что эти потоки просто не синхронизированно работают.
Как синхронизировать в индейцах подключения я не помню.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.11.2013, 11:33   #28
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

для идентификации юзернейма достаточно
eval вне форума Ответить с цитированием
Старый 17.11.2013, 11:44   #29
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
для идентификации юзернейма достаточно
Порты хранить? А если порт на всех один?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.11.2013, 12:03   #30
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

не, ИП-ы порты и т.д. это все не уникально да и мало функционально
надо что-то сурогатное типа UserName или что-то из этой же оперы
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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