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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2007, 21:26   #1
leontv
 
Регистрация: 23.10.2007
Сообщений: 7
Вопрос Как определить номер клиента

TClientSocket посылает строчку серверу TServerSocket.
Как на стороне сервера определить номер клиента, пославшего строку?
Имеется в виду порядковый номер активного соединения.

Очень нужно. Давно ищу помощи, но пока тщетно.
leontv вне форума Ответить с цитированием
Старый 26.11.2007, 11:55   #2
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
По умолчанию

ну так у тя пусть на определенном компе будет уникальный порядковый номер у клиента и когда он клиент убдет посылать на сервер комманду то в этой комманде будет этот уникальный номер...
Перед тем как спросить ищи на форуме и в GOOGLE
KORN вне форума Ответить с цитированием
Старый 26.11.2007, 12:30   #3
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
По умолчанию

у TCustomSocket есть свойство Data, это указатель. К примеру при конекте юзера мы создаем объект TUser, в него вносим всю инфу о подключении IP, Port, Nick, NumberConnect вообщем все что захочется. А потом при приходе текста читаем его TUser(Socket.Data).NumberConnect.
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Старый 27.11.2007, 15:12   #4
leontv
 
Регистрация: 23.10.2007
Сообщений: 7
Злость

Цитата:
Сообщение от OrdJONY Посмотреть сообщение
у TCustomSocket есть свойство Data, это указатель. К примеру при конекте юзера мы создаем объект TUser, в него вносим всю инфу о подключении IP, Port, Nick, NumberConnect вообщем все что захочется. А потом при приходе текста читаем его TUser(Socket.Data).NumberConnect.
Я правильно понимаю, что для каждого соединения в отдельности нужно создавать при коннекте свой отдельный объект?
Откуда при коннекте взять NuberConnect?

Вообще никак не могу подойти к решению задачи, как закрыть соединения, у которых порвалась связь с клиентами?
Сервер работает со множеством клиентов. Клиенты используют GPRS связь. Дак вот, когда связь разрывается, то сервер этого не чуствует и держит соединение (которого нету) в списке активных.
Таким образом количество активных соединений нарастает как снежный ком.
Как вычислить и закрыть разорванные соединения не знаю.
Танцую с бубном уже два месяца.
Жду помощи !

Последний раз редактировалось leontv; 27.11.2007 в 15:44.
leontv вне форума Ответить с цитированием
Старый 27.11.2007, 17:45   #5
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
По умолчанию

к примеру возьмем следующий объект:
Код:
TUser = class
  Number: Cardinal;
  Socket : Pointer;
...
создать глобальную переменную типа ActiveConnections : Cardinal, дальше при коннекте:
Код:
var NewUser : TUser;
begin
NewUser := TUser.Create;
NewUser.Number := ActiveConnections+1;
NewUser.Socket := Pointer(Socket);
...
Socket.Data := NewUser;
List.add(NewUser);
при дисконнекте:
Код:
begin
...
TUser(Socket.Data).Free;
ActiveConnections := ActiveConnections -1;
еще не забудьте удалить из List
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Старый 28.03.2010, 17:29   #6
Rapala
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 46
По умолчанию

Помогите пожалуйста!
Мне нужно, чтобы при подключении клиента, ему давалось имя, номер. Нужно чтобы имя клиента добавлялось в Combobox1 и потом можно было выбрать имя и работать именно с этим клиентом.
Это на подключение:
Код:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
NewUser := TUser.Create;
NewUser.Number := form1.ServerSocket1.Socket.activeconnections+1;
NewUser.Socket := Pointer(Socket);
Socket.Data := NewUser;
newuser.Name:=('user#'+floattostr(serversocket1.Socket.ActiveConnections));
combobox1.Items.add(NewUser.name);
Дальше, при нажатии на кнопку, проверка содержимого Combobox1 и отправка сообщения клиенту с этим именем:
Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
if combobox1.text='user#1' then (?).sendtext('diskopen');
end;
Подскажите, что надо вставить вместо (?) чтобы сообщение отправилось к клиенту с именем user#1. Уже несколько дней ломаю голову.
Rapala вне форума Ответить с цитированием
Старый 28.03.2010, 17:58   #7
Rapala
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 46
По умолчанию

Ответьте пожалуйста, срочно очень надо
Rapala вне форума Ответить с цитированием
Старый 28.03.2010, 17:58   #8
MyIE
Форумчанин
 
Аватар для MyIE
 
Регистрация: 02.01.2010
Сообщений: 127
По умолчанию

не-не, отправка происходит таким образом:
Код:
ServerSocket.Socket.Connections[i].SendText('тру_ла_ла');
где i есть номер соединения
В твоем случае, наверное, NewUser.Number
0_o
MyIE вне форума Ответить с цитированием
Старый 28.03.2010, 18:03   #9
Rapala
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 46
По умолчанию

Точно! Понял, вместо i надо вставить NewUser.Number!!!!!!!!! Спасибо огромное!
Rapala вне форума Ответить с цитированием
Старый 28.03.2010, 18:36   #10
Rapala
Пользователь
 
Регистрация: 28.03.2010
Сообщений: 46
По умолчанию

Мда... это не работает(
Rapala вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Среди 20 введёных чисел определить чётные, распечатать их, определить min Spade Помощь студентам 4 15.06.2008 18:39
Как определить номер строки верхней левой ячейки диапазона Porog Microsoft Office Excel 8 09.05.2008 08:37
Определить номер строки с наибольшей характеристикой. jenja Общие вопросы Delphi 2 26.03.2008 21:11
Паскаль. Определить номер позиции,в которой символы отличаются Stelix Помощь студентам 6 06.11.2007 16:53