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

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

Вернуться   Форум программистов > Клуб программистов > Обсуждение статей
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2010, 23:34   #351
Pypkin30159
Пользователь
 
Регистрация: 03.04.2010
Сообщений: 19
По умолчанию

Может сделать не много по сложнее. Узнать IP адрес пользователя и и кикнуть его через него.
Код:
ClientIP:=ServerSocket.Socket.Connections[i].RemoteAddress;
но я ума не прилажу что должна содержать переменная "i"
попыталя это сделать так но он выдает ошибку
Код:
procedure TForm1.N4Click(Sender: TObject);
begin
Ban := UserListView.Selected.Index; // Ban - Byte, Word, Integer
ClientIP:=ServerSocket.Socket.Connections[Ban].RemoteAddress;//ошибка [Error] MainUnit.pas(680): Incompatible types: 'Byte' and 'String'
ServerSocket.Socket.Connections[ClientIP].Close;
UpdDo:= True;

Последний раз редактировалось Pypkin30159; 21.04.2010 в 23:37.
Pypkin30159 вне форума Ответить с цитированием
Старый 22.04.2010, 12:40   #352
Pypkin30159
Пользователь
 
Регистрация: 03.04.2010
Сообщений: 19
По умолчанию

И еще я не пойму как сделать так чтоб я кликнул по нику отправившего сообщение (ПКМ или ЛКМ) и его ник скопировался в окно ввода такста.
Pypkin30159 вне форума Ответить с цитированием
Старый 22.04.2010, 16:23   #353
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Pypkin30159 Посмотреть сообщение
С этими кодами вообще беда! он теперь кикает не того пользователя кого я выделил а вообще в произвольном порядке, кого захочет. По идее я присваиваю индекс выделенного пользователя и принудительно закрываю, но это не происходит
procedure TForm1.N4Click(Sender: TObject); - это видимо процедура кнопки N4, как только по ней производится клик, UserListView теряет выделение конкретной записи (специфика объектного манипулирования). Изучите хорошо компонент TListView, ...доступ к записи всегда можно получить через UserListView.Selected, вот так получить имя пользователя:

Код:
{переменная} := UserListView.Selected.Caption;
Посмотрите как работает приват, и аналогичным образом организуйте кик пользователей, с проверкой режима "клиент/сервер".
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 22.04.2010, 19:28   #354
Pypkin30159
Пользователь
 
Регистрация: 03.04.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
procedure TForm1.N4Click(Sender: TObject); - это видимо процедура кнопки N4, как только по ней производится клик, UserListView теряет выделение конкретной записи (специфика объектного манипулирования). Изучите хорошо компонент TListView, ...доступ к записи всегда можно получить через UserListView.Selected, вот так получить имя пользователя:

Код:
{переменная} := UserListView.Selected.Caption;
Посмотрите как работает приват, и аналогичным образом организуйте кик пользователей, с проверкой режима "клиент/сервер".
Все спасибо за поддержку решил проблему. Не обратил внимание на что выделение слетает.
Pypkin30159 вне форума Ответить с цитированием
Старый 24.04.2010, 08:45   #355
Razyiller
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 50
По умолчанию

я реализовал так и вроде работает

Код:
ServerSocket.Socket.Connections[ServerSocket.Socket.ActiveConnections-1].Close;
UpdDo:=true;

Последний раз редактировалось Beermonza; 24.04.2010 в 15:29.
Razyiller вне форума Ответить с цитированием
Старый 24.04.2010, 15:29   #356
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Razyiller Посмотреть сообщение
я реализовал так и вроде работает:
Код:
ServerSocket.Socket.Connections[ServerSocket.Socket.ActiveConnections-1].Close;
UpdDo:=true;
Этот код выпинывает последнего подключившегося клиента, но не произвольно указанного.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 07.05.2010, 14:31   #357
Pypkin30159
Пользователь
 
Регистрация: 03.04.2010
Сообщений: 19
По умолчанию

Есть еще один вопрос как можно реализовать систему разности версий.
Допустим Серверная часть 2.1 а клиент пытается подключится с версией 2.0 то не пустить его на сервер и вывести сообщение с просьбой обновиться.
Все ни как не могу реализовать. Скажите как реализовать эту систему или в какую сторону капать(даже как прописать в поисковике думаю справлюсь).
Pypkin30159 вне форума Ответить с цитированием
Старый 07.05.2010, 19:12   #358
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Введите еще один тип команды. Задайте код, какой он там уже будет по счету, 5-й? ...и пусть в UpdateUserMas сервер вместо запроса:
Код:
ServerSocket.Socket.Connections[i-1].SendText('1');
шлет:
Код:
ServerSocket.Socket.Connections[i-1].SendText('5');
...т.е. сервер "спрашивает версию", в первом случае он запрашивал ник подключившегося.

Вот запрос с сервера по команде 5 ушел, ...клиент должен реагировать на него. В ClientSocketRead case-структуру допишите пункт 5: ...пусть в нем формируется строчка, первый символ которой - код команды "5" далее некий ключ, в котором можно зашифровать версию или явно ее прописать буквами и цифрами.

Итак, клиент отреагировал на запрос сервера и послал ответ. Сервер еще не знает, что это за пакет. Учим его понимать. Идем в процедуру ServerTimerTimer, в case-структуру добавляем пункт 5: ...в нем пишем условие: если пакет с символа 2 и длиной минус 1 равен версии сервера (нужна переменная на сервере, которая хранит версию, или так сравниваем со строчкой, написанной тут же), то отправить клиенту запрос на авторизацию:
Код:
ServerSocket.Socket.Connections[i-1].SendText('1');
...иначе (версии не совпали) просто закроем канал:
Код:
ServerSocket.Socket.Connections[i-1].Close;
// разрешаем обновление
UpdMas:=True;
Чтобы клиент знал почему его не пускают на сервер, можно зарезервировать еще одну команду, у которой есть ключ (первый символ) и следующий, отвечающий за код сообщения. Клиент сначала должен получить ответ, вывести на экран, затем сервер закрывает канал.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 07.05.2010 в 19:15.
Beermonza вне форума Ответить с цитированием
Старый 07.05.2010, 20:57   #359
Pypkin30159
Пользователь
 
Регистрация: 03.04.2010
Сообщений: 19
По умолчанию

И еще вопрос как подсчитать количество подключившихся пользователей или какая переменная их содержит.
Pypkin30159 вне форума Ответить с цитированием
Старый 07.05.2010, 23:33   #360
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Pypkin30159 Посмотреть сообщение
И еще вопрос как подсчитать количество подключившихся пользователей или какая переменная их содержит.
Код:
ServerSocket.Socket.ActiveConnections
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление в блоге - Создание клиент-сервера Pblog Обсуждение статей 0 03.10.2007 17:12
обновление в блоге - Диплом. Создание и продвижение сайта - готовь сани летом, а дипл Pblog Обсуждение статей 0 31.08.2007 20:00
обновление в блоге - USB Холодильник Pblog Обсуждение статей 0 25.06.2007 14:13
обновление в блоге - О ярлыках Pblog Обсуждение статей 0 27.05.2007 03:17