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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2010, 20:17   #491
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

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

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Ошибка сокета на клиенте появляется, когда я убиваю сервер или после того как я снова запускаю сервер и пишу в чат с клиента ов ремя подключения. Тоесть ошибки две.
Очень странно, ...у меня с запущенного EXE никаких ошибок сокета не показывает, и не должно, ...процедура отлавливает их. Что у вас за ОС такая? ...у меня работает и на XP и на Vista и на Windows 7, последние две под лицензией, сообщений таких не вылетает.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 26.06.2010, 20:57   #493
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Самопальная сборка Windows Zver
1. Ошибка после крушении сервера
2. Ошибка после отправки сообщения во время подключения к серверу (сервер перезапущен)
Была ещё ошибка с 10052
P.S. Ошибки не показываются в самой программе только из под Delphi
Изображения
Тип файла: gif 1.gif (6.6 Кб, 130 просмотров)
Тип файла: gif 2.gif (7.0 Кб, 127 просмотров)

Последний раз редактировалось Shouldercannon; 26.06.2010 в 20:59.
Shouldercannon вне форума Ответить с цитированием
Старый 26.06.2010, 21:50   #494
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Тогда это не ошибки, если не показываются не из под Delphi, на то они и отфильтровываются. Проверьте, появляется ли у клиента событие OnError.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 26.06.2010, 22:18   #495
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Проверьте, появляется ли у клиента событие OnError.
Event Сокета OnError? Как проверить?

Скачал отсюда версию чата 2.0 и там такая же борода, только после первого отправленного сообщения в режиме ожидания подключения клиент подключился затем второе сообщение прошло нормально.

В прикреплённом файле проект, над которым я проводил эксперимент.
Вложения
Тип файла: rar BZChat 2_0.rar (40.9 Кб, 48 просмотров)

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

Цитата:
Сообщение от Shouldercannon
Event Сокета OnError? Как проверить?
В тело код, чтобы в поле чата добавлялась надпись "Ошибка", ...если появиться в тесте, значит туда перенести запуск таймера переподключения.
Я не знаю почему у вас так реагирует на ошибки сокета ОС.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 27.06.2010, 15:51   #497
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
В тело код, чтобы в поле чата добавлялась надпись "Ошибка", ...если появиться в тесте, значит туда перенести запуск таймера переподключения.
Я не знаю почему у вас так реагирует на ошибки сокета ОС.
Код:
procedure TForm1.ClientSocketError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  RichView1.Add('Ошибка', 3);
  RichView1.Format;
end;
Вывелось, когда завершил работу сервера через Диспетчер задач.

И в этом обаботчике по нулям (не переподключается). Таймер переподключения работает исправно (каждые 5 секунд стабильно делает ClientSocket.Active := True;), но при перезапущенном сервере не подключается. Думал маршрутизатор виноват, но и тут облом, даже проброска порта не помогла.

Последний раз редактировалось Shouldercannon; 27.06.2010 в 16:25.
Shouldercannon вне форума Ответить с цитированием
Старый 27.06.2010, 16:41   #498
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Вот так попробуйте:

Код:
procedure TForm1.ClientSocketError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  ConnectTimer.Enabled := True;
end;
При коннекте:

Код:
procedure TForm1.ClientSocketConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ConnectTimer.Enabled := False;


  ...

end;
В обработке нужна отправка пакета:

Код:
procedure TForm1.ClException(Sender: TObject; Error: Exception);
begin
  If (Error.ClassName = 'ESocketError') then
    Begin
      ClientSocket.Socket.SendText('0');     // это вызовет ошибку сокета на стороне клиента
      // сново пытаемся подключиться через таймер 1 раз в 10 секунду
      ConnectTimer.Enabled := True;
      // меняем надпись клавиши
      ClientBtn.Caption:='Ожидание...';
    end
  else Application.ShowException(Error);   // ошибки не сокета пусть показывает
end;
Так у вас?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 27.06.2010, 16:53   #499
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Всё также, только добавил ClientSocket.Socket.SendText('0'); и переподключение сработало. Работает даже без
Код:
procedure TForm1.ClientSocketError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  ConnectTimer.Enabled := True;
end;
1. В данной модели чата реально генерировать ID по IP? С ID будет проще управлять клиентами (бан, админка и т.д.).

Последний раз редактировалось Shouldercannon; 27.06.2010 в 16:56.
Shouldercannon вне форума Ответить с цитированием
Старый 27.06.2010, 20:39   #500
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Shouldercannon
1. В данной модели чата реально генерировать ID по IP? С ID будет проще управлять клиентами (бан, админка и т.д.).
Номер канала строго связан с листом коннектов компонента сокета, они нумеруются от 0 и до количества каналов - 1. Если делать событийный опрос и обработку по сокету и указателю (технически нагляднее), то модель защиты, путем построения клиентов в очередь, рушится.
Руководитель проекта 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