Система обміну зашифрованими текстовими повідомленнями (програма чат на С++ Builder)
29

    if ((pos = u.find("$", 0)) >= 0)

і якщо знаходить, то виконує певні дії (в даному прикладі службовий символ вирізається з повідомлення, а все інше виводиться в ListBox1 ).

{ u.replace(pos, 1, "\0");ListBox1->Items->Add(u.c_str());}

         ClientSocket1 та ServerSocket1 також  є стандартними компонентами, проте мають більш розширений набір методів та подій у відмінності від IdUDPClient1 та IdUDPServer1.  Для передачі даних були використані події OnRead, OnConnect та методи SendText і ReceiveText,  яких є достатньо як для передачі повідомлень, так і для передачі файлів.

Для роботи сокетних сервера та клієнта також були створені спеціальні службові повідомлення, використовуються наступні:

- "no" – клієнт відмовив у прийомі файлаж;

- "og!" – клієнт підтвердив прийом файлаж;

- "end" – клієнт прийняв файл;

- "FileS" – запит зі сторони сервера на передачу файла.

У загальних рисах передача файлів через сокети виглядає таким чином: вся інформація передається пакетами, і якщо в одному з пакетів зустрічається #file -  це означає, що прийшов заголовок файлу з подальшою інформацією про нього (ім'я, розмір) і клієнт повинен приймати файл вказаного розміру. У чистому вигляді заголовок файлу виглядає так: file#filename#filesize#. Коли клієнт приймає такий заголовок, він обробляє його(виділяє ім'я файлу і його розмір), створює буфер розміром filesize і в нього пише всю подальшу інформацію. Коли розмір переданої інформації дорівнює розміру файлу, посилає на сервер команду "end", сервер обробляє цю команду і закриває потік.

При запуску програми її налаштування автоматично зчитуються з регістру,

Місцезнаходження записів: HKEY_CURRENT_USER\Software\Chat.

Всі налаштування записуються при закритті програми, окрім налаштувань  записується також місцезнаходження вікна програми на момент його закриття. Для зчитування з регістру використовують наступні методи: