Подписаться на RSS рассылку
Главная » Статьи по Delphi » Интернет и сети » Делаем примитивный чат на DELPHI

Делаем примитивный чат на DELPHI

Автор: PROGER-ZONE

Tweet
Думаю вам не раз приходила идея создать свой (корпоративный) чат. Такая же идея пришла и мне, и я как всегда начал искать информацию в сети интернет, но таки ни чего хорошего и не нашел. Все как то не полно описывает как это можно сделать.

И я себе обещал, как изучу так выложу полную информацию по этой теме. Я делал свой чат на сокетах. По ним можно общаться, как по сети интернет, так и по локальной сети. Для этого вам достаточно знать Ip адрес. Программировал на Delphi7.

Установка необходимых компонентов

Так как я делал на delphi7, там не было по умолчанию тех компонентов, которые мне нужны. (ServerSocket1, ClientSocket1).
Для этого нужно добавить компоненты Сокета.

В меню заходим Component --> Install Packages…--> Add --> dclsockets70.bpl 

И указываем путь к пакету с компонентами, он находиться в корневом папке Delphi в паке Bin. У меня он находился в:

C:\Program Files\Borland\Delphi7\Bin\ dclsockets70.bpl

После такого добавления у вас в вкладке Internet должны появиться данные компоненты.

Размещение компонентов и написание кода

На форму я кинул такие элементы: ServerSocket1, ClientSocket1, Edit1 (для чата), Edit2 (для IP адреса сервера), Memo1 для отображения сообщения, ну и 3 кнопки.

Для создания Сервера пишем на событие в кнопке вот такую вещь:

function GetLocalIP: String; 
const WSVer = $101;
var
  wsaData: TWSAData;
  P: PHostEnt;
  Buf: array [0..127] of Char;
begin
  Result := '';
  if WSAStartup(WSVer, wsaData) = 0 then begin
    if GetHostName(@Buf, 128) = 0 then begin
      P := GetHostByName(@Buf);
      if P <> nil then
        Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
    end;
    WSACleanup;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ServerSocket1.Port:=65000; // Порт вашего сервера, задаем любой какой вам понравиться
  ServerSocket1.Active:=True; // активируем сервер
  ServerSocket1.Open; //запускаем
  ShowMessage('Ваш IP: '+GetLocalIP); //выдаем наш IP адрес, чтоб клиент смог к нам подключиться
end;

После того как сервер был включен, клиент сможет подключиться к серверу. 
Для этого он прописывает IP адрес сервера в Edit2, И нажимает кнопку соединиться:

procedure TForm1.Button2Click(Sender: TObject); 
begin
  ClientSocket1.Address:=Edit2.Text; // IP адрес сервера
  ClientSocket1.Port:=65000; //его порт
  ClientSocket1.Active:=True; //активируем клиента
  ClientSocket1.Open; //запускаем
end;

Внимание: Клиент может только отправлять сообщение, а Сервер в свою очередь – принимать. Для двустороннего общения включите Клиента и Сервера на двух программах разного конца сети.

Для чтения сообщения, у сервера есть ожидание приема сообщения…вот она

procedure TForm1.ServerSocket1ClientRead(Sender: TObject; 
    Socket: TCustomWinSocket);
begin
  memo1.Lines.add(Socket.RemoteAddress+': ');
  memo1.Lines.add(Socket.ReceiveText);
  StatusBar1.Panels.Items[0].Text:=Socket.RemoteAddress;
end;

Для отправки сообщения я написал в двух процедурах. Вот они:

procedure TForm1.SendMes(Text: String); 
begin
  if form1.ServerSocket1.Active then
    if form1.ServerSocket1.Socket.ActiveConnections>0 then
      form1.ServerSocket1.Socket.Connections[0].SendText(Text);

  if form1.ClientSocket1.Active then
    form1.ClientSocket1.Socket.SendText(Text);
end;
procedure TForm1.Button1Click(Sender: TObject); 
begin
  SendMes(Edit1.Text);
  memo1.Lines.add(GetLocalIP+': ');
  memo1.Lines.add(Edit1.Text);
end;

Вот и всё! Примитивный Чат у вас готов. Далее ваша фантазия и умелые руки.

Удачи!

Статьи по теме: Создание простейшего чата

Просмотров: 28873

Обсудить на форуме

0   Спам
(27.12.2011)
4. Тупупау
Забыли процедурку для получения сообщений у клиента.

procedure TForm1.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo1.Lines.add(Socket.ReceiveText());
end;

0   Спам
(16.06.2011)
3. Руслан
Добавляем в uses Winsock и всё робит!

0   Спам
(13.04.2011)
2. uma
+1 wsaData: TWSAData; ))не роботает...

0   Спам
(29.03.2011)
1. гг
Луди!Не пашет...проблема вот в чем-- " wsaData: TWSAData; " выделяет красным и незапускается!!!ПОМОГИТЕ ПЛЗ!!


Имя *:
Email:


Код *:

Copyright © 2008 - 2018 Программирование на Delphi для начинающих и не только.

Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам.

Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации.