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

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


Смотри, как легко все превращается в текст. В обработчике я объявил одну переменную StringFormatedStream типа TStringStream (строковый поток). Первой строкой кода я его инициализирую. Во второй строчке я копирую в строковый поток данные из простого неформатированного потока. Все!!! Теперь переданный мне текст находится в свойстве DataString строкового потока StringFormatedStream. Я смело могу выводить этот результат в компонент Memo.

Но мы же пишем чат, и желательно еще и выводить информацию о том, кто сказал этот текст. Для примера я вывожу IP адрес отправителя данных, который находится в свойстве PeerIP третьего параметра ABinding. Но это только для примера и в реальной ситуации это некрасиво. Поэтому ты можешь добавлять имя отправителя сразу в текст отправки. Это значит, что по нажатию кнопки отправки сообщения нужно изменить код следующим образом:

IdUDPClient1.Send('Сюда помести имя отправителя'+

Edit1.Text);

Можно дать возможность юзверю вводить имя в отдельной строке ввода Edit2. В этом случае код будет таким:

IdUDPClient1.Send(Edit2.Text+' '+Edit1.Text);

Все!!! Кодинг окончен.

COMPLETE!

Если у тебя все получилось, то можешь запустить прогу и пообщаться с самим собой. Ну а если благодаря Х ты уже осетенил свой дом, район, город (нужное подчеркнуть), то устанавливай свой чат всех сетянам и общайся. Чат простой, но очень быстрый и абсолютно не нагружает систему, в отличие от чатов на основе TCP.

Если у тебя возникли проблемы с компиляцией, то Delphi (как и у меня) забыл добавить к проекту модуль idSocketHandle. Допиши его в раздел uses, и проблемы уйдут.

Дополнительную инфу, как всегда, можно найти на моем сайте www.cydsoft.com/vr-online. Там же можно найти и исходники чата, написанные мной.

ЛИСТИНГ 1

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData:

TStream; ABinding: TIdSocketHandle);

var

StringFormatedStream: TStringStream;

s: String;

begin

//Инициализация

StringFormatedStream := TStringStream.Create('');

//Копирование из простого потока в строковый.

StringFormatedStream.CopyFrom(AData, AData.Size);

//Вывод полученного сообщения

Memo1.Lines.Add(ABinding.PeerIP+' '+StringFormatedStream.DataString);

//Перенаправление сообщения дальше

ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s[1], Length(s));

//Освобождение строкового потока.

StringFormatedStream.Free;

end;

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