Чат для локалки собственными руками

Xakep, номер #038, стр. 038-061-1


Внимание!!! Пример, написанный в Kylix, прекрасно работает в Delphi

Horrific aka Фленов Михаил (smirnandr@mail.ru) http://www.cydsoft.com/vr-online/

Так уж получается в последнее время, что на Delphi я пишу проги-приколы, а с помощью Kylix я рассказываю про сетевой кодинг. Сегодня я не буду нарушать эту традицию, и в этой статье тебя ожидает рассказ про UDP протокол. По рубрике Hack-FAQ я понял, что не все еще профиксили, что это за зверь.

ТЕОРИЯ ПРОТОКОЛА

На данный момент существует два основных и самых распространенных протокола - TCP и UDP. Раньше был еще очень распространен IPX, который использовала фирма Novell. Но на данный момент он отходит, и уже редко увидишь такого зверя. Только на старых системах можно увидеть IPX. Большинство остальных протоколов, которые ты знаешь (FTP, HTTP, POP3, SMTP и дальше в том же духе), работают поверх TCP или UDP.

Что это значит - "поверх другого протокола"? В TCP реализованы основные функции для работы с сетью. Он умеет устанавливать соединение с удаленным компом, передавать и принимать данные и проверять правильность получения серваком отправленных пакетов. Теперь мы хотим создать протокол для передачи файлов (FTP). Для этого берем TCP, наделяем его нужными нам возможностями и - получите-распишитесь. Вот и получается, что FTP работает через (поверх) протокола TCP. Если бы мы захотели создать FTP с чистого листа, то нам пришлось бы заново реализовывать функции установки соединения и передачи данных. А так нам нужно только подготовить данные в спецформате (протокола FTP) и отдать их протоколу TCP, и он сам уже установит соединение и отдаст эти данные куда надо.

Ели ты помнишь самую первую мою статью в рубрике "кодинг", где я рассматривал основы, то уже заметил аналогию с объектно-ориентированным программированием. Именно по такому принципу работает сеть. Все это дело стандартизировано, и если хочешь узнать подробнее, то почитай какую-нибудь доку про модель OSI (Open Systems Interconnection) и ее семь уровней (тут опять могу отослать на свой сайт, где я уже все подробно описал). Эта тема довольно интересна, и в любом случае желательно знать устройство протоколов.

ПРОТОКОЛ UDP

Протокол UDP очень похож на TCP. В нем также реализованы возможности передачи данных, но он не устанавливает соединения и не поддерживает целостности передаваемых данных. Протокол просто открывает порт, выплевывает туда порцию данных и даже не волнуется о том, дошли они к получателю или нет. Поэтому UDP работает намного быстрей.

Если ты захочешь работать с этим протоколом, то проверку правильности получения данных придется реализовывать самому. Так что для передачи файлов или другой инфы большого размера ты должен выбрать TCP. Ну а для чата, который мы сегодня напишем, более удобным вариантом будет UDP. Он очень быстрый и при маленьких сообщениях очень эффективен.

В Delphi для работы с UDP протоколом хорошо подходит библиотека Indy. Мы ее уже использовали, когда писали пример утилиты WhoIs. Сегодня снова возвращаемся к ней.

БУДЬ ГОТОВ!

С теорией покончено, давай переходить к написанию чата. На этот раз я написал его в Delphi и потом протестировал в Kylix. В обеих средах чат откомпилировался без проблем. Так что не имеет значения, что будешь использовать ты.

Содержание  Вперед на стр. 038-061-2