Создание чата при помощи Delphi Сейчас ты узнаешь, как создать простейший чат на два пользователя. Его можно использовать в обмене важными данными, т.к. есть вероятность, что на твоем компе установлен какой-нибудь троян ICQ, и вся история icq ежедневно отправляется злоумышленнику, а на этот чат Troяn не залезит, разве что у тебя нет клавиатурного шпиона который делает скриншоты твоего экрана . Так, думаю ты уже включил Delphi (Я использовал Delphi7) и создал новый проэкт, если нет, то сделай это, если да, то давай приступим к созданию сетевого чата на двоих . Основные два компонента для реализации чата, это ServerSocket и ClientSocket. Эти компоненты находятся на вкладке Internet … по умолчанию их там нет, но их легко туда поместить выбрать в меню: Component - Install Package, там нажать на кнопку Add и далее указать путь …\bin\dclsockets70.bpl. Так я уже говорил, этот проект представляет собой чат на двоих пользователей. Думаю теперь можно приступить к форме и накидать туда компоненты. Ну во-первых нам понадобятся компоненты ServerSocket и ClientSocket со вкладке Internet, кинем в форму 4 Edit’a, первый назовем Port, вторую Edit-форму назовем Host (понадобиться нам это, потому что для соединения с сервером необходимо указывать IP сервера), третью форму назовем Name (поле для ника) и последнею форму назовем Send (поле для отправки сообщения), также кинем на форму Memo ( Текст сообщений будет отображаться в), я его так и назвал Memo. Также установим вертикальную полосу прокрутки: ScrollBars (на панели Object Inspector поставить ssVertical, и свойство ReadOnly - True. Также добавим 3 кнопки ServerOn (открыть, создать сервер), Client (клиен), SendText (отправка сообщений) и ServerOff (закрыть сервер). Изменим название клавиш на “Создать сервер”, “Подключиться” и “Отправить”. Для красоты чата можно добавить несколько Label-форм, можно и картинку подставить. Теперь непосредственно перейдем к самому коду программы, сначала опишем процедуру OnCreate: procedure TForm1.FormCreate(Sender: TObject); begin Port.Text:='777'; // при проверке программы на одном ПК Host.Text:='127.0.0.1'; Name.Text:='NickName'; // поле Memo и Send просто очистим Send.Clear; Memo.Lines.Clear; //блокируем клавишу Закрыть сервер ServerOff.Enabled:=Fasle; end; Переход программы в режим сервера будет осуществляется клавишей "Создать сервер" (ServerOn): procedure TForm1.ServerOnClick(Sender: TObject); Begin // клавишу Client, ServerOn и поля Host, Port надо заблокировать, // а ServerOff разблокировать соответственно ServerOn.Enabled:=False; Client.Enabled:=False; Host.Enabled:=False; Port.Enabled:=False; ServerOff.Enabled:=True; // запишем указанный порт в ServerSocket ServerSocket.Port:=StrToInt(Port.Text); // создание сервер ServerSocket.Active:=True; // добавим в Memo сообщение с временем создания Memo.Lines.Add('['+TimeToStr(Time)+'] Сервер создан '); end; Теперь рассмотрим код клавиши "Закрыть сервер" (ServerOff): procedure TForm1.ServerOffClick(Sender: TObject); Begin // клавишу Client, ServerOn и поля Host, Port разблокируем, ServerOff заблокируем Client.Enabled:=True; Host.Enabled:=True; Port.Enabled:=True; ServerOff.Enabled:=False; ServerOn.Enabled:=True; // закрываем сервер ServerSocket.Active:=False; // выводим сообщение в Memo Memo.Lines.Add('['+TimeToStr(Time)+'] Сервер закрыт!'); end; Теперь разберемся с событиями, которые будут происходить при определенном состоянии ServerSocket’а. Напишем процедуру, когда клиент подсоединился к серверу (OnClientConnect): procedure TForm1.ServerSocketClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin // добавим в Memo сообщение с временем подключения пользователя Memo.Lines.Add('['+TimeToStr(Time)+'] Подключился пользователь.'); end; Теперь когда клиент отключается (OnClientDisconnect): procedure TForm1.ServerSocketClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin // добавим в Memo сообщение с временем отключения пользователя Memo.Lines.Add('['+TimeToStr(Time)+'] Пользователь отключился.'); end; Когда на сервер приходит очередное сообщение клиента, мы должны сразу же отображать его (OnClientRead): procedure TForm1.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket); begin // добавим в Memo клиентское сообщение Memo.Lines.Add(Socket.ReceiveText()); end; Самое главное в любом сетевом сайте – это отправка сообщений. Напишем процедуру кнопки SendText(OnClick): procedure TForm1.SendTextClick(Sender: TObject); begin // проверка, в каком режиме находится программа If ServerSocket.Active=True then // отправляем сообщение с сервера ServerSocket.Socket.Connections[0].SendText('['+TimeToStr(Time)+'] '+Name.Text+': '+Send.Text) else // отправляем сообщение с клиента ClientSocket.Socket.SendText('['+TimeToStr(Time)+'] '+Name.Text+': '+Send.Text); // отобразим сообщение в Memo Memo.Lines.Add('['+TimeToStr(Time)+'] '+Name.Text+': '+Send.Text); end; Теперь разберемся с режимом клиента. Вот процедура Client (OnClick): procedure TForm1.ClientClick(Sender: TObject); begin If Client.Tag=0 then Begin // клавишу ServerOn, ServerOff и поля Host, Port заблокируем ServerOff.Enabled:=False; ServerOn.Enabled:=False; Host.Enabled:=False; Port.Enabled:=False; // запишем указанный порт в ClientSocket ClientSocket.Port:=StrToInt(Port.Text); // запишем хост и адрес ClientSocket.Host:=Host.Text; ClientSocket.Address:=Host.Text; // запускаем клиента ClientSocket.Active:=True; // изменяем тэг Client.Tag:=1; // меняем надпись клавиши Client.Caption:='Отключиться'; end else Begin // клавишу ServerOn и поля Host, Port разблокируем ServerOn.Enabled:=True; ServerOff.Enabled:=False; Host.Enabled:=True; Port.Enabled:=True; // закрываем клиента ClientSocket.Active:=False; // выводим сообщение в Memo Memo.Lines.Add('['+TimeToStr(Time)+'] Сессия закрыта.'); // возвращаем тэгу исходное значение Client.Tag:=0; // возвращаем исходную надпись клавиши Client.Caption:='Подключиться'; end; end; Ну чат уже почти готов, нам осталось прописать процедуры на OnConnect, OnDisconnect, OnRead клиента ClientSocket. Сначала на чтение сообщения с сервера (OnRead): procedure TForm1.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); begin // добавим в Memo пришедшее сообщение Memo.Lines.Add(Socket.ReceiveText()); end; Дальше все просто, обычное добавление в Memo определенного сообщения: procedure TForm1.ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket); begin // добавим в Memo сообщение о соединении с сервером Memo.Lines.Add('['+TimeToStr(Time)+'] Подключение к серваку.'); end; procedure TForm1.ClientSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin // добавим в Memo сообщение о потере связи Memo.Lines.Add('['+TimeToStr(Time)+'] Сервер не был найден.'); end; Вот вроде и все что я хотел показать вам сегодня. И исходя из этого простого примера чата, можно создать профессиональный чат с массами новых возможностей. В следующей версии я исправлю все недачеты, будет добавлено много новых функций. Всем спасибо на вмимание. Удачи J Исходник Exe-файл
В следующей версии программы добавлю возможность звуковых отчетов, сделаю удобный интерфейс и постараюсь исправить все ошибки. Ждите
Эта не статья раз! Код скопирован два! Комментарии добавить по книге, сложно как ппц...-это три! Вывод: Почитай, погугли, разберись, и сделай свой код, свою статью... Копипаст это "-" в репутацию... пока незачот!
сделай лучше не только на двоих а на много человек, на сокетах, юпд протокол, интрефейс как у qip, тогда толково будет.