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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2013, 10:30   #1
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию clientsocket, присвоить id

Доброе всем утро. Битый час ломаю голову. В гугле найти не могу ничего по этому поводу.

Юзаю Tclientsocket и TServerSocket.

Собственно, как присвоить индивидуальный id к каждому подключению, дабы в дальнейшем с ним работать?

Как принимать так и отправлять определённому ИДу сообщения.

Например:
Код:
  ServerSocket1.Socket.Connections[client_id].SendText('toclient')
Заранее спасибо.

Последний раз редактировалось _ZixeL_; 10.02.2013 в 10:41.
_ZixeL_ вне форума Ответить с цитированием
Старый 10.02.2013, 16:43   #2
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

Уточню.
Есть сервер(я) и 4-5 клиента. Мне надо от них принимать сообщения и распределять по определённым Мемо, например.
Как можно это реализовать? Помогите пожалуйста

Последний раз редактировалось _ZixeL_; 10.02.2013 в 18:48.
_ZixeL_ вне форума Ответить с цитированием
Старый 10.02.2013, 21:00   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Вот недавно с товарищем Ansy работали http://programmersforum.ru/showthread.php?t=225551 посмотрите как там реализовано многоклиентность.
И юзаем поиск - хотя бы по clientsocket - кучу примеров бы уже получили и проверили бы.
phomm вне форума Ответить с цитированием
Старый 10.02.2013, 23:24   #4
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Вот недавно с товарищем Ansy работали http://programmersforum.ru/showthread.php?t=225551 посмотрите как там реализовано многоклиентность.
И юзаем поиск - хотя бы по clientsocket - кучу примеров бы уже получили и проверили бы.
Спасибо за ответ.
Но, из вашего обсуждения вообще ничего не ясно. Не силён на столько в делфи. Разве нет простого решения этой задачи? Читал, что есть некая Data:Pointer, которая выдаёт значение уникальному подключению. Но мануалов по этому поводу не нашёл никаких.

Юзал поиск по форому, но что мне нужно, так и не нашёл.
_ZixeL_ вне форума Ответить с цитированием
Старый 11.02.2013, 06:41   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Ну читаем код сервера оттуда, там даже прокомментировано всё, хотя имена переменок не оч.
Конкретно запоминание юзеров по хендлу сокета, по которому они подключаются
Код:
New(vo);
    with vo^ do begin
      fn:='';
      dt:=Now;
      hd:=socket.Handle;
      nk:=vh^.from;
    end;
    Dispose(vh);
    users.Items.AddObject(bh^.from,TObject(vo));
Запоминаются в коллекцию объектов в листбоксе. Потом функция itemBySHandle по хендлу ( а хендл ищется по имени клиента в листбоксе) выдаёт номер для того, что Вы называете client_id .

Не буду говорить, что единственный способ, в принципе можно придумать много способов, вручную раздавать идентификаторы в событии TServerSocket.OnClientConnect например, да хоть постоянно опрашивать каждого клиента на некий ключ, какой-нибудь GUID

Последний раз редактировалось phomm; 11.02.2013 в 06:44.
phomm вне форума Ответить с цитированием
Старый 11.02.2013, 09:29   #6
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

Спасибо, но не осилил всё ровно >___<
_ZixeL_ вне форума Ответить с цитированием
Старый 11.02.2013, 10:36   #7
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

И еще один вопрос: Как организовать переподключение клиента к серверу, при внезапном закрытии сервера?
Я отсылаю пакет от клиента к серверу "toserver", если сервер отвечает "toclient" Значит всё нормально. Но, если я закрываю сервер, и оставляю клиент на ночь с отправками запроса "toserver". То, после запуска сервера, клиент никак не может подключиться. В чём проблема может быть? Делаю так:

Код:
procedure TDataModule1.TimerConnectTimer(Sender: TObject);
begin
GeneralForm.ClientSocket1.Socket.SendText('toserver');
 if not (GeneralForm.ClientSocket1.Socket.ReceiveText='toclient') then
  begin
   GeneralForm.ClientSocket1.Open;
  end;
end;

Код:
procedure TGeneralForm.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode := 0;
Clientsocket1.Close;
end;
Мне надо регулярно отправлять этот пакет, даже когда подключение успешное.
Но вот после простоя клиента, коннект не происходит

Последний раз редактировалось _ZixeL_; 11.02.2013 в 10:59.
_ZixeL_ вне форума Ответить с цитированием
Старый 11.02.2013, 17:46   #8
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от _ZixeL_ Посмотреть сообщение
Мне надо регулярно отправлять этот пакет, даже когда подключение успешное.
Код:
procedure TDataModule1.TimerConnectTimer(Sender: TObject);
begin
GeneralForm.ClientSocket1.Socket.SendText('toserver');
end;
Shouldercannon вне форума Ответить с цитированием
Старый 11.02.2013, 19:41   #9
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

что-то заморочно...
зачем клиенту какой то ид? он уже есть в списке подключенных и список доступен...

тема сервера какая? очередной чат или что-то серьезное?

проект выложи позырить
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 11.02.2013 в 19:47.
Slym вне форума Ответить с цитированием
Старый 11.02.2013, 21:02   #10
_ZixeL_
Форумчанин
 
Регистрация: 04.11.2012
Сообщений: 151
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Код:
procedure TDataModule1.TimerConnectTimer(Sender: TObject);
begin
GeneralForm.ClientSocket1.Socket.SendText('toserver');
end;
Вы не правильно поняли.
Я от клиента отправляю серверу сообщение "toserver", если сервер отвечает "toclient" значит выводим в лейб, что мы подключены к серверу. Так вот, если отключить сервер на часов 10, то после запуска клиент не может подключиться. Ошибок никаких не выдаёт.
_ZixeL_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ClientSocket rule-z Работа с сетью в Delphi 52 29.06.2011 08:27
ClientSocket AlexJan Компоненты Delphi 5 12.09.2010 08:08
ClientSocket misher Общие вопросы Delphi 2 09.07.2010 15:55
Serversocket,clientsocket prizrak1390 Работа с сетью в Delphi 10 21.04.2009 16:04
Проблема с ClientSocket Shouldercannon Работа с сетью в Delphi 1 23.03.2009 14:45