Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
82 / 82 / 39
Регистрация: 17.02.2016
Сообщений: 464
1

ServerSocket: принудительное отключение клиентов

21.01.2017, 15:56. Показов 2271. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
обрабатываю подключение, отправляю запрос на ввод аккаунта
Delphi
1
2
3
4
procedure TfrmServer.ServerSocket1Accept(Sender: TObject; Socket: TCustomWinSocket);
begin
  Socket.SendText(cmd_GetAcc);//посылаем запрос аккаунту клиенту
end;
в
Delphi
1
procedure TfrmServer.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
обрабатываю данные авторизации (логин:пас)

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  Msg := Socket.ReceiveText;
  Cmd := Copy(Msg, 1, CmdLen);
  MsgData := Copy(Msg, Length(cmd_Nick) + 1, Length(Msg) - Length(cmd_Nick));
 
  if (Cmd = cmd_Authorization) then   {Если это команда авторизации, то}
  begin
    acc := Copy(MsgData, 1, Pos(':', MsgData) - 1);
    pass := Copy(MsgData, Pos(':', MsgData) + 1, Length(MsgData));
    {Выделяем память под нового клиента}
    New(NewClient);
    {Записываем его акк\пасс}
    NewClient^.acc := acc;
    NewClient^.pass := pass;
    {указатель на данные (Data) сокета текущего клиента будет являться адресом выделенной области памяти}
    Socket.Data := NewClient;
    PPacket(Socket.Data)^.TransFile := nil;
    if CheckAcc(acc) then
    begin
      Socket.SendText(cmd_NicknameBusy);
    end
    else
    begin
      if Authorization(acc, Sha1Base64(pass)) then
        Socket.SendText(cmd_AuthorizationTrue + '<nick>' + NewClient^.Nick + '</nick>' + '<msg>' + ' Авторизация успешна.'#13#10 + '</msg>')
      else
        Socket.SendText(cmd_AuthorizationFalse);
    end;
  end
собственно вопрос как принудительно разорвать соединение в случае не верного логина\пароля
пробовал отправлять команду на отключение клиенту
Delphi
1
Socket.SendText(cmd_AuthorizationFalse);
не всегда клиент обрабатывает данною команду, при "спаме" кнопкой логин на стороне сервера создается много "новых клиентов"

может кто подкинет правильною реализацию авторизации на сокетах или исходник стабильного чата с авторизацией
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2017, 15:56
Ответы с готовыми решениями:

ServerSocket отследить аварийное отключение клиента
Здравствуете! Пытаюсь сделать текстовый с одним сервером и некоторым числом клиентов,...

RDP - принудительное отключение
Добрый день. Суть вследующем. Настроен сервер терминалов без AD, на сервере Win 2012 r2, ...

ServerSocket распределить клиентов
Всем привет. Уже второй день не могу решить задачу. Собственно, есть сервер(я) и есть 4-5...

ServerSocket и несколько клиентов.
Есть сервер и два клиента, подключенных к нему. Отправляю текст ВСЕМ: for(int counter = 0;counter...

5
8 / 8 / 4
Регистрация: 18.12.2016
Сообщений: 104
21.01.2017, 17:05 2
дисконект
0
82 / 82 / 39
Регистрация: 17.02.2016
Сообщений: 464
22.01.2017, 20:27  [ТС] 3
пробовал разные варианты принудительного отключения пользователей - вылетают ошибки
нужно как то опросить всех пользователей и удалить тех с которыми нет связи, подскажите как подобное реализовать
0
8 / 8 / 4
Регистрация: 18.12.2016
Сообщений: 104
22.01.2017, 21:18 4
Цитата Сообщение от HiredKiller Посмотреть сообщение
удалить тех с которыми нет связи
если клиент отключается, то у сервера должно срабатывать ондисконект
0
82 / 82 / 39
Регистрация: 17.02.2016
Сообщений: 464
22.01.2017, 21:53  [ТС] 5
Капитан Америка, да, но в случае "аварийного" отключения (убить приложение через диспетчер, сдох ком, вытянули кабель интернета) пользователь "висит" в списке подключенных и вызывает ошибку при отправке ему любых данных (в моем случае еще и мешает повторному входу, так как запрещено входить с одним и тем же аккаунтом 2 раза)
0
8 / 8 / 4
Регистрация: 18.12.2016
Сообщений: 104
23.01.2017, 00:38 6
ну там же есть список подключений, циклом обходи и опрашивай
0
23.01.2017, 00:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2017, 00:38
Помогаю со студенческими работами здесь

ServerSocket Thread. Много клиентов
Помогите сделать Сервер , который бы принимал сразу нескольких клиентов. Server: import...

ServerSocket передача файлов от клиентов серверу
Нужна помощь! Есть приложение для win. Сервер - клиент для передачи файлов. Работает это все дело...

Класс ServerSocket подключает не больше 50 (в среднем) клиентов одновременно
Господа, Надо написать на java обычное серверное приложение, которое слушает какой-то порт и...

Anylogic отключение delay после 10 обслуженных клиентов
Студент начал изучать anylogic 7. Стоит задача построить модель обслуживания людей банкоматом. Я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru