Войти

Чат

В этой статье я расскажу как в шестом билдере написать свой чат по сети.

Создаем две папки: сервер и клиент.

Чат - Felix TrushДля начала создадим сервер.  Запустим билдер,  создадим новый проект (File->New->Application).  Сразу сохраним его в папку «сервер». Добавляем на формы следующие компоненты и изменяем свойства:

  • Label1 — В свойстве Caption пишем «Порт»
  • Edit1 — В свойстве Text пишем «5648», это будет наш порт для подключения, можно задать любой другой.
  • Button1 - В свойстве Caption пишем «Создать»
  • Memo1 — В свойстве Lines удаляем все строки
  • Edit2 - В свойстве Text стираем все символы
  • Button2 - В свойстве Caption пишем «Отправить»
  • ServerClient1 — Ничего не меняем


Теперь необходимо переименовать наши компоненты,  для этого изменяем свойство «Name»:

  • Label1 — Оставим как есть
  • Edit1 -> EditPort
  • Button1 -> ButtonStart
  • Memo1 -> MemoMessages
  • Edit2 -> EditMessage
  • Button2 -> ButtonSend
  • ServerClient1 -> ServerClient
  • Form1 -> FormMain

Все компоненты аккуратно расставили, и теперь начинаем писать код. Дважды щелкаем по кнопке «Создать», пешем следующий код:

Выделить все
1
2
3
4
EditPort<span style="color: #000040;">-</span><span style="color: #000080;">></span>Enabled <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span> <span style="color: #666666;">//Отключаем поле ввода порта</span>
ButtonStart<span style="color: #000040;">-</span><span style="color: #000080;">></span>Enabled <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span> <span style="color: #666666;">//Отключаем кнопку запуска</span>
ServerSocket<span style="color: #000040;">-</span><span style="color: #000080;">></span>Port <span style="color: #000080;">=</span> EditPort<span style="color: #000040;">-</span><span style="color: #000080;">></span>Text.<span style="color: #007788;">ToInt</span><span style="color: #008000;"></span><span style="color: #008000;"></span><span style="color: #008080;">;</span> <span style="color: #666666;">//Задаем серверу порт</span>
ServerSocket<span style="color: #000040;">-</span><span style="color: #000080;">></span>Active <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span> <span style="color: #666666;">//Включаем сервер</span>

Далее нам необходимо написать функцию рассылки сообщений, ее нужно писать после функции __fastcall TFormMain::TFormMain (TComponent* Owner). Код:

Выделить все
1
2
3
4
5
6
7
8
<span style="color: #0000ff;">void</span> TFormMain<span style="color: #008080;">::</span><span style="color: #007788;">SendingMessages</span><span style="color: #008000;"></span>AnsiString Message<span style="color: #008000;"></span> <span style="color: #666666;">//Функция рассылки сообщений</span>
<span style="color: #008000;">{</span>
  MemoMessages<span style="color: #000040;">-</span><span style="color: #000080;">></span>Lines<span style="color: #000040;">-</span><span style="color: #000080;">></span>Add<span style="color: #008000;"></span>Message<span style="color: #008000;"></span><span style="color: #008080;">;</span> <span style="color: #666666;">//Вывод сообщения на экран</span>
  <span style="color: #0000ff;">for</span><span style="color: #008000;"></span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;"><</span> ServerSocket<span style="color: #000040;">-</span><span style="color: #000080;">></span>Socket<span style="color: #000040;">-</span><span style="color: #000080;">></span>ActiveConnections<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;"></span> <span style="color: #666666;">//Цикл перебирает всех подключенных</span>
  <span style="color: #008000;">{</span>
    ServerSocket<span style="color: #000040;">-</span><span style="color: #000080;">></span>Socket<span style="color: #000040;">-</span><span style="color: #000080;">></span>Connections<span style="color: #008000;">[</span>i<span style="color: #008000;">]</span><span style="color: #000040;">-</span><span style="color: #000080;">></span>SendText<span style="color: #008000;"></span>Message<span style="color: #008000;"></span><span style="color: #008080;">;</span> <span style="color: #666666;">//Рассылка сообщений</span>
  <span style="color: #008000;">}</span>
<span style="color: #008000;">}</span>

Кстати еще в .h файле в разделе private необходимо написать void SendingMessages (AnsiString Message);

Вернемся на форму, выберем у ServerSocket обработчик OnClientRead в вкладке Events, щелкаем два раза, пишем код:

Выделить все
1
SendingMessages<span style="color: #008000;"></span>Socket<span style="color: #000040;">-</span><span style="color: #000080;">></span>ReceiveText<span style="color: #008000;"></span><span style="color: #008000;"></span><span style="color: #008000;"></span><span style="color: #008080;">;</span> <span style="color: #666666;">//Читаем сообщения и рассылаем их через функцию SendingMessages()</span>

Щелкаем два раза по кнопке отправить, пишем код:

Выделить все
1
SendingMessages<span style="color: #008000;"></span><span style="color: #ff0000;">"Сервер: "</span> <span style="color: #000040;">+</span> EditMessage<span style="color: #000040;">-</span><span style="color: #000080;">></span>Text<span style="color: #008000;"></span><span style="color: #008080;">;</span> <span style="color: #666666;">//Рассылаем сообщение через функцию SendingMessages()</span>

И последнее, выберем у формы обработчик OnClose и впишем в него:

Выделить все
1
ServerSocket<span style="color: #000040;">-</span><span style="color: #000080;">></span>Active <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span> <span style="color: #666666;">//При закрытии формы отключаем сервер</span>

Компилируем, сервер готов.

Чат - Felix TrushТеперь напишем клиент. Создаем новый проект (File->New->Application).  Сразу сохраним его в папку «клиент». Добавляем на формы следующие компоненты и изменяем свойства:

  • Label1 — В свойстве Caption пишем «Порт»
  • Label2 — В свойстве Caption пишем «Хост»
  • Label3 — В свойстве Caption пишем «Ник»
  • Edit1 — В свойстве Text пишем «5648», это будет наш порт для подключения, можно задать любой другой.
  • Edit2 - В свойстве Text пишем «127.0.0.1»
  • Edit2 - В свойстве Text пишем «Гость»
  • Button1 - В свойстве Caption пишем «Подключиться»
  • Memo1 — В свойстве Lines удаляем все строки
  • Edit2 - В свойстве Text стираем все символы
  • Button2 - В свойстве Caption пишем «Отправить»
  • ServerSocket1 — Ничего не меняем <img src=" src="http://libixur.ru/wp-includes/images/smilies/icon_smile.gif"/>

Теперь необходимо переименовать наши компоненты,  для этого изменяем свойство «Name»:

  • Label1 -> Оставим как есть
  • Label2 -> Оставим как есть
  • Label3 -> Оставим как есть
  • Edit1 -> EditPort
  • Edit2 -> EditHost
  • Edit2 -> EditName
  • Button1 -> ButtonConnect
  • Memo1 -> MemoMessages
  • Edit2 -> EditMessage
  • Button2 -> ButtonSend
  • ServerSocket1 -> ServerSocket

Пишем код для компонентов, начнем с кнопки «Подключиться»:

Выделить все
1
2
3
4
5
6
7
EditPort<span style="color: #000040;">-</span><span style="color: #000080;">></span>Enabled <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span> <span style="color: #666666;">//Отключаем поле ввода порта</span>
EditHost<span style="color: #000040;">-</span><span style="color: #000080;">></span>Enabled <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span> <span style="color: #666666;">//Отключаем поле ввода хоста</span>
EditName<span style="color: #000040;">-</span><span style="color: #000080;">></span>Enabled <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span> <span style="color: #666666;">//Отключаем поле ввода ника</span>
ButtonConnect<span style="color: #000040;">-</span><span style="color: #000080;">></span>Enabled <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span> <span style="color: #666666;">//Отключаем кнопку подключения</span>
ClientSocket<span style="color: #000040;">-</span><span style="color: #000080;">></span>Port <span style="color: #000080;">=</span> EditPort<span style="color: #000040;">-</span><span style="color: #000080;">></span>Text.<span style="color: #007788;">ToInt</span><span style="color: #008000;"></span><span style="color: #008000;"></span><span style="color: #008080;">;</span> <span style="color: #666666;">//Задаем клиенту порт для подключения</span>
ClientSocket<span style="color: #000040;">-</span><span style="color: #000080;">></span>Host <span style="color: #000080;">=</span> EditHost<span style="color: #000040;">-</span><span style="color: #000080;">></span>Text<span style="color: #008080;">;</span> <span style="color: #666666;">//Задаем клиенту хост для подключения</span>
ClientSocket<span style="color: #000040;">-</span><span style="color: #000080;">></span>Active <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span> <span style="color: #666666;">//Включаем клиента</span>

Кнопка «Отправить»:

Выделить все
1
ClientSocket<span style="color: #000040;">-</span><span style="color: #000080;">></span>Socket<span style="color: #000040;">-</span><span style="color: #000080;">></span>SendText<span style="color: #008000;"></span>EditName<span style="color: #000040;">-</span><span style="color: #000080;">></span>Text <span style="color: #000040;">+</span> <span style="color: #ff0000;">": "</span> <span style="color: #000040;">+</span> EditMessage<span style="color: #000040;">-</span><span style="color: #000080;">></span>Text<span style="color: #008000;"></span><span style="color: #008080;">;</span> <span style="color: #666666;">//Отсылаем на сервер ник и сообщение</span>

Обработчик OnRead у компонента ClientSocket:

Выделить все
1
MemoMessages<span style="color: #000040;">-</span><span style="color: #000080;">></span>Lines<span style="color: #000040;">-</span><span style="color: #000080;">></span>Add<span style="color: #008000;"></span>Socket<span style="color: #000040;">-</span><span style="color: #000080;">></span>ReceiveText<span style="color: #008000;"></span><span style="color: #008000;"></span><span style="color: #008000;"></span><span style="color: #008080;">;</span> <span style="color: #666666;">//Выводим на экран принятое сообщение</span>

Обработчик OnClose у формы:

Выделить все
1
ClientSocket<span style="color: #000040;">-</span><span style="color: #000080;">></span>Active <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span> <span style="color: #666666;">//При закрытии формы отключаем клиента</span>

Все, клиент тоже готов. Компилируем...
Теперь можем проверить работоспособность нашего чата, для этого сначала запускаем сервер, жмем «создать». Затем запускаем клиент, жмем «Соединиться». Пробудем писать, сообщения должны отсылаться и отображаться в каждом окне.

Исходник: sozdanie-setevogo-chata-na-c-builder-6.zip

Будут вопросы, обращайтесь!

Обсудить у себя 0
Комментарии (0)
Чтобы комментировать надо зарегистрироваться или если вы уже регистрировались войти в свой аккаунт.
Feel
Feel
Был на сайте 5 мая 2018 года в 20:24
Читателей: 6 Опыт: 0 Карма: 1
все 5 Мои друзья
...Anastasiya Mexeskpect163MarcusAGOIN