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