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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2009, 15:50   #111
rzawm
Пользователь
 
Аватар для rzawm
 
Регистрация: 06.04.2009
Сообщений: 80
По умолчанию

Beermonza, блин досадно, но ладно, буду дальше ломать RxRichEdit, может выйдет толк. Всё равно всем спасибо
rzawm вне форума Ответить с цитированием
Старый 28.04.2009, 17:28   #112
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Как можно уберечь сервер чата от особо одаренных юзеров, которые любят выходить из программ при помощи Завершения процесса или выключать компьютер с работающим преложением после чего сервер чата ругается
"Windows socket error: Удаленный хост принудительно разорвал существующее подключение (10054), on API 'recv'"

"Asynchronous socket error 10053"
Shouldercannon вне форума Ответить с цитированием
Старый 28.04.2009, 22:35   #113
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Как можно уберечь сервер чата от особо одаренных юзеров, которые любят выходить из программ при помощи Завершения процесса или выключать компьютер с работающим преложением после чего сервер чата ругается
"Windows socket error: Удаленный хост принудительно разорвал существующее подключение (10054), on API 'recv'"

"Asynchronous socket error 10053"
Пост #69, там описан перехват ошибок сокета.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 29.04.2009, 08:09   #114
rzawm
Пользователь
 
Аватар для rzawm
 
Регистрация: 06.04.2009
Сообщений: 80
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Как можно уберечь сервер чата от особо одаренных юзеров, которые любят выходить из программ при помощи Завершения процесса или выключать компьютер с работающим преложением после чего сервер чата ругается
"Windows socket error: Удаленный хост принудительно разорвал существующее подключение (10054), on API 'recv'"

"Asynchronous socket error 10053"
Можно ещё попробовать что то типа Form.Destroy а там ClientSocket1.Active:=False; и т.д.
rzawm вне форума Ответить с цитированием
Старый 29.04.2009, 11:15   #115
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Shouldercannon, в постах ранее есть про отображение ника и IP как узнать тоже есть. ShowColorMassage выводит в поле чата все, что имеет тип string. Для таблицы бана достаточно создать массив типа string, в него отправлять IP. При коннекте очередного клиента смотреть все не пустые записи в массиве и удалять только что созданный канал пользователя, если есть совпадение IP. Также нужно создать файл, в него записывать все содержимое массива бана, ...при запуске сервера, считывать данные в массив.
Да было дело
Цитата:
Сообщение от DeCoder Посмотреть сообщение
Спасибо за помошь!
Можно-ли сделать, чтобы ip клиента было видно серверу в самом чате возле его ника? Пробовал - получилось не то - ip видно тогда всем пользователям. т.е. необходимо, чтобы сервер при получении сообщения определял ip того, от кого оно пришло. В локальном чате всё гораздо проще...
Только на него не дали реализации в коде.
Цитата:
Сообщение от rzawm Посмотреть сообщение
Можно ещё попробовать что то типа Form.Destroy а там ClientSocket1.Active:=False; и т.д.
Я имел ввиду, что когда клиент коряво выходит, то сервер ругается и хорошо не вылетает. Но всеравно надо залатать эту дыру.
Shouldercannon вне форума Ответить с цитированием
Старый 29.04.2009, 18:08   #116
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от rzawm Посмотреть сообщение
Можно ещё попробовать что то типа Form.Destroy а там ClientSocket1.Active:=False; и т.д.
Да, да, ...при сбое или падении клиента банальным перезапуском компа, сервер не получит команду к завершению сеанса корректным образом, поэтому есть перехват ошибок сокета. Нужно "сказать" форме в OnCreateForm, что обработку ошибок будет выполнять рукописная процедура ClException:
Код:
Application.OnException := ClException;
А вот сама процедура:
Код:
procedure TForm1.ClException(Sender: TObject; Error: Exception);
begin
  If (Error.ClassName = 'ESocketError') then
    Begin
      // что нужно сделать, вывести сообщение в поле, или
      // может быть опросить все каналы заново.
    end
  else Application.ShowException(Error);   // ошибки не сокета пусть показывает
end;
Кто-то спрашивал на счет изменения Form1.Caption во время прихода очередного пакета. Нужно банально изменять обратно Caption следующей же строкой после приема. В исходниках это есть, в самом конце процедуры ServerTimerTimer.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 29.04.2009, 21:19   #117
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Beermonza покажите позалуйста как будет выглядеть эта процедура в коде я в сокетах не очень разбираюсь
Цитата:
Можно-ли сделать, чтобы ip клиента было видно серверу в самом чате возле его ника? И чтобы его IP небыло видно клиентам (только в юзерлисте сервера).
Shouldercannon вне форума Ответить с цитированием
Старый 30.04.2009, 14:33   #118
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Подробно расписывать код не буду, только помогу от чего оттолкнуться.
Сначала нужно расширить список, добавить колонку для IP-адресов. Правый клик на компоненте TListView, выбрать Columns Editor. Добавить нужные столбцы, один или несколько. Вот так можно добраться до записей:
Код:
// первый столбец строки i
UserListView.Items.Item[i].Caption := {строка};
// и дальше до последующих столбцов до n в той же строке i
UserListView.Items.Item[i].SubItems.Strings[n] := {строка};
Как брать IP-адрес знаем. Остается прописать в процедуре UpdateUserList условие, если активен серверный сокет, то заполнять лист с IP-адресами, если клиентский, то заполнять обычным образом, как и было ранее в коде.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 30.04.2009, 20:36   #119
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Да и как разрулить эту ситуацию. Когда на сервер приходит личное сообщение, то ноль эмоций
Вот решил проблему
Код:
// если приватный пользователь - "сервер"
                     If PrivateUser=Form2.ENick.Text then
                       Begin
// добавим в REChat сообщение клиента
                         ShowColorMessage(Copy(text,1,5)+Copy(text,7+Length(PrivateUser),len-Length(PrivateUser)-1), 1);

sndPlaySound('sounds/privatemessage.wav', SND_ASYNC);
Можно ли на сервере прямо из юзер листа взять конкретно юзера и выкинуть его из чата?

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

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Можно ли на сервере прямо из юзер листа взять конкретно юзера и выкинуть его из чата?
Выбираем канал и закрываем его ServerSocket.Socket.Connections[i].Close, после чего идет обновление UpdDo := True
Руководитель проекта 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