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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2014, 22:12   #1
PaHaNjkee
Delphi 10 Seattle
Пользователь
 
Аватар для PaHaNjkee
 
Регистрация: 01.11.2010
Сообщений: 90
По умолчанию Узнать ID соединения (Socket)

Есть n-число клиентов и сервер, клиент посылает определенные команды серверу, сервер их обрабатывает. Как узнать ID данного клиента который посылает команды (т.е. ID соединения)?
PaHaNjkee вне форума Ответить с цитированием
Старый 17.03.2014, 23:13   #2
PaHaNjkee
Delphi 10 Seattle
Пользователь
 
Аватар для PaHaNjkee
 
Регистрация: 01.11.2010
Сообщений: 90
По умолчанию

И еще:
Допустим что у каждого клиента на форме есть ListBox, один из клиентов послал команду в виде переменной (например str := 'Hello') для сервера. Сервер обрабатывает команду и отправляет всем запущенным клиетам команду мол нужно добавить эту переменную в свой ЛистБокс. Все отлично происходит. Но если клиент отключается, то он должен посылать команду "удалить переменную из лист бокса" для сервера и опять же сервер отправляет всем клиентам. Но тут возникла проблема, если клиент отключается, то он не может отправить команду, поэтому нужно отправлять команду до отключения. Но если сделать так, то команда не успевает дойти/обработаться/отправиться назад и вылетает Socket Error. Что посоветуете?
PaHaNjkee вне форума Ответить с цитированием
Старый 17.03.2014, 23:14   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Хендл что ли? В OnConnect по идее можно узнать. Если я правильно помню.
Я когда-то просто при очередном коннекте в StringList записывал никнейм юзера (который тот мне присылал при коннекте, всмысле после коннекта) и присваивал свойству objects этого никнейма очередной socket, который приконнектился. Так собсно и ID хранить незачем - хранятся сами сокеты.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.03.2014, 16:34   #4
PaHaNjkee
Delphi 10 Seattle
Пользователь
 
Аватар для PaHaNjkee
 
Регистрация: 01.11.2010
Сообщений: 90
По умолчанию

Ну допустим от клиента (а) нужно отправить команду клиенту (б), команда проходит через сервер и чтобы отправить клиенту (б) нужно знать его ID
Socket.Connections[id клиента b].SendText(..);

Вот для этого именно и нужно мне узнать ID. А вмсысле Хендл? SocketHandle?
PaHaNjkee вне форума Ответить с цитированием
Старый 19.03.2014, 22:22   #5
PaHaNjkee
Delphi 10 Seattle
Пользователь
 
Аватар для PaHaNjkee
 
Регистрация: 01.11.2010
Сообщений: 90
По умолчанию

Ребят, прошу помогите хоть кодом чтоли, либо идеей какой нибудь, а то в голову ничего умного не лезет.
PaHaNjkee вне форума Ответить с цитированием
Старый 19.03.2014, 22:32   #6
Drabadan
 
Регистрация: 06.03.2014
Сообщений: 5
По умолчанию

Цитата:
Сообщение от PaHaNjkee Посмотреть сообщение
Ребят, прошу помогите хоть кодом чтоли, либо идеей какой нибудь, а то в голову ничего умного не лезет.
а если для каждого из клиентов на сервере создать определенную переменную в которую писать массив созданных событий, если клиент отключается то и массив етих событий удаляется и при обновлении клиентов им придет извещении об отсутствии соответствующих отключенному клиенту событий\переменных.
Drabadan вне форума Ответить с цитированием
Старый 20.03.2014, 14:39   #7
PaHaNjkee
Delphi 10 Seattle
Пользователь
 
Аватар для PaHaNjkee
 
Регистрация: 01.11.2010
Сообщений: 90
По умолчанию

Цитата:
Сообщение от Drabadan Посмотреть сообщение
а если для каждого из клиентов на сервере создать определенную переменную в которую писать массив созданных событий, если клиент отключается то и массив етих событий удаляется и при обновлении клиентов им придет извещении об отсутствии соответствующих отключенному клиенту событий\переменных.
Попробую. У меня была идея присваивать значение переменной клиента Server.Socket.ActiveSonnection-1, потом если ID клиента >= Server.Socket.ActiveSonnection-1 то просто удаляем на клиенте переменную, а если меньше, то удаляем переменную и у всех клиентов изменяем переменную с ID подключения на -1
PaHaNjkee вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать скорость интернет-соединения t2skler Работа с сетью в Delphi 2 13.12.2010 22:54
Как узнать основной шлюз соединения? TwiX Работа с сетью в Delphi 0 13.09.2010 20:02
Ошибка сокета Djem1991 Работа с сетью в Delphi 4 16.06.2010 15:39
ip для сокета Solan C/C++ Сетевое программирование 4 07.03.2010 18:05
Определение сокета SLASH_CyberPunk Работа с сетью в Delphi 3 21.07.2008 13:02