Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для Insider246
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 119

При отсутствии сервера самому становиться сервером

25.03.2016, 09:05. Показов 1118. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня маленькая прога - мини чат, там реализация и для создания сервера и для создания клиента, но все это отдельно, то есть по нажатию разных кнопок. Но я хочу сделать, чтобы человек нажимал на одну кнопку и если сервера не создано, то он становился сервером, а если создан под этот хост и порты, то он становился клиентом. Можно ли это как-то осуществить какой-то проверкой или все в таких случаях совсем по другому делается.

p.s так и не смог придумать нормальный, но короткий заголовок для сабжа...

Добавлено через 7 минут
Если что, то идельно было бы объеденить коды вот этих двух функций кнопок добавив просто какую-то проверку

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::ButtonCreateClick(TObject *Sender)  // Для создания сервера
{
  ServerSocket->Active = true;
  isServer = true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ButtonConnectClick(TObject *Sender)  // Для подключения клиента
{
  ClientSocket->Host = EditHost->Text;
  ClientSocket->Address = EditHost->Text;
  ClientSocket->Active = true;
}
Добавлено через 11 минут

Добавлено через 10 часов 51 минуту
Я решил это, но корявенько; просто сделал в функции OnError у клиента такое же подключение, плюс добавил предупреждение, что выскочит сообщение об ошибке и ее можно игнорировать

P.S. Можно ли как-то запретить ошибкам появляться или заменить их текст на свой? Было бы очень удобно
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2016, 09:05
Ответы с готовыми решениями:

Заменить один текстовый файл на другой при отсутствии пинга до сервера и вернуть все обратно при его появлении
Добрый день. Нужно заменить один текстовый файл на другой при отсутствии пинга до сервера и вернуть все обратно при восстановлении пинга....

Sbitbtn Кнопка становиться белая при Enabled:=false
В общем при Sbitbtn.Enabled:=True; Вот такая картинка: При Sbitbtn.Enabled:=False; Такая: Знает кто, как это решить ?

При использовании Qt::AA_DontUseNativeMenuBar в Mac Os X меню становиться неактивным
Привет! Пишу под маком, хочу сделать меню в окне приложения, а не сверху, как обычно. Использую следующую конструкцию: ...

9
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
25.03.2016, 09:34
Цитата Сообщение от Insider246 Посмотреть сообщение
Можно ли как-то запретить ошибкам появляться или заменить их текст на свой? Было бы очень удобно
Извините, что навязываюсь, но... если бы вы посмотрели на предложенный мной пример чата более творчески, что ли, то заметили бы, что там применяется компонент ApplicationEvents, который перехватывает такое сообщение и выводит его аккуратно в Label к примеру...
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::ApplicationEvents1Exception(TObject *Sender,
      Exception *E)
{
    if (E->Message.Pos("socket error 10061"))
   {
      Shape1->Brush->Color = clNavy;
      Button1->Down = false;
      Label1->Caption = "Ошибка: сервер не отвечает";
   }  else Label1->Caption = "Ошибка!";
}
1
 Аватар для Insider246
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 119
25.03.2016, 11:54  [ТС]
Просто для меня тогда это было слишком все сложно тогда. Можно узнать что это за сервер 192.168.0.1?

Добавлено через 6 минут
P.S. Вообще о билдере я узнал чуть больше месяца назад, и программирование как таковое только для университетских задач делаю, поэтому если у меня какие-то глупые или неуместные вопросы (типа: из какого дерева лучше строить небоскреб), то можете смело мне говорить что я даже базовые вещи себе совсем не так представляю
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
25.03.2016, 11:59
Цитата Сообщение от Insider246 Посмотреть сообщение
Можно узнать что это за сервер 192.168.0.1
Для локальных сетей выделены два диапазона IP-адресов: 192.168.х.х и 10.10.х.х. Насколько мне известно,- все остальные для адресации в пределах мировой сети. Когда компьютеры в локальной сетке имеют статические адреса, то обычно в этих зонах. Адрес можно посмотреть в свойствах "Протокол Интернета вер.4" сетевой карты.
0
 Аватар для Insider246
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 119
25.03.2016, 12:07  [ТС]
О, а можете подсказать можно ли сканировать всю подсеть в поисках сервера если я не знаю на каком компьютере он был запущен, чтобы подключиться к нему клиентом... Я наверно ерунду написал, но если вы меня поняли, то буду рад ответу

Добавлено через 2 минуты
Или как-то еще зная что где-то запущена эта же программа и она являеться сервером, узнать ее хост или адрес, чтоб подсоедениться к ней
(Я ощущаю теоретическую невозможность задуманного, но мало ли, кому то удавалось)))
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
25.03.2016, 12:09
У меня в этом мало практики; где-то на этом форуме встречал, что можно обойтись без явного назначения сервера для обмена сообщениями, - это, по моему, ваш случай.
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
25.03.2016, 12:24
Клиентом посылается широковещательный запрос для сервера. Кто ответил - там и сервер.
0
 Аватар для Insider246
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 119
25.03.2016, 12:38  [ТС]
А вы бы не могли показать пример как это сделать, а то мне гугл не помог?
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
25.03.2016, 13:06
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

Нужно отправить запрос по адресу 192.168.0.255 - это зарезервированный адрес для широковещательных запросов.
0
 Аватар для Insider246
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 119
26.03.2016, 19:44  [ТС]
Вот пробую, пробую, но тяжко идет... Можете сказать немного поподробней как это сделать с сокет-компонентами. Просто в функции OnRead у клиента их ожидать, или как ждать ответа и какой он должен быть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2016, 19:44
Помогаю со студенческими работами здесь

Перезагрузка Express-сервера самим сервером
Как мне из скрипта а) его завершить, б) перезагрузить? Предполагается, что в скрипте запущен сервер Express. Хочу с клиента...

отменить то, что при наведении курсора окно становиться активным
Подскажите пожалуйста, как отменить то, что при наведении курсора окно становиться активным(без щелчка по окну, а только от...

При переходе на другую сцену с таким же освещением объект становиться светлее
Привет. у меня есть сцена меню и сцена игры, с полностью одинаковым освещением. И в сценах есть сферы, с полностью одинаковыми параметрами...

Организация сервера для работы с ним (сервером) по RDP
Доброго вечера уважаемые форумчане! Возникла потребность на работе организовать сервер под 1С, больше ничего на нем запускать в ближайшем...

Организовать связь с удаленным сервером (мониторинг работоспособности сервера)
Здравствуйте! Имеется: 1) 2 VPS сервера, которые иногда по неизвестным причинам не работают некоторое время (бывает по известным -...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru